2011-01-24 24 views
5

Estoy buscando una función para encontrar las filas más repetidas (es decir, modales) de una matriz en MATLAB. Algo así como:Encuentra la fila más repetida en una matriz MATLAB

>> A = [0, 1; 2, 3; 0, 1; 3, 4] 

A = 

0  1 
2  3 
0  1 
3  4 

A continuación, ejecutando:

>> mode(A, 'rows') 

volvería [0, 1], a ser posible con una segunda salida que da los índices donde se produjo esta fila (es decir [1, 3]'.)

¿Alguien sabe de tales ¿Una función?

Respuesta

13

Puede usar UNIQUE para obtener índices de filas únicos, y luego llamar al MODE en ellos.

[uA,~,uIdx] = unique(A,'rows'); 
modeIdx = mode(uIdx); 
modeRow = uA(modeIdx,:) %# the first output argument 
whereIdx = find(uIdx==modeIdx) %# the second output argument 
+1

Thanks. Creo que la última línea debería ser algo como: 'whereIdx = find (uIdx (modeIdx) == uIdx)' embargo. –

+0

@Bill Cheatham: Sí, por supuesto. Eso es lo que obtengo por agregar una línea * después de * la prueba. – Jonas

+2

esto puede no ser correcto. Pruebe A = [2, 3; 0, 1; 3, 4; 0, 1] – sinoTrinity

2

La respuesta puede no ser correcta. Pruebe A = [2, 3; 0, 1; 3, 4; 0, 1]. Debe ser el siguiente:

[a, b, uIdx] = unique(A,'rows'); 
modeIdx = mode(uIdx); 
modeRow = a(modeIdx,:) %# the first output argument 
whereIdx = find(ismember(A, modeRow, 'rows')) %# the second output argument 
Cuestiones relacionadas