2011-01-28 7 views
6

Actualmente, soy capaz de encontrar el valor máximo de una matriz C y su índice con el siguiente código:Encontrar el valor máximo de un subconjunto de la matriz en MATLAB preservando al mismo tiempo los índices de la matriz completa

[max_C, imax] = max(C(:)); 
[ypeak, xpeak] = ind2sub(size(C),imax(1)); 

Vamos a llamar a un subconjunto de la matriz C_sub

Quiero encontrar el valor máximo de C_sub, pero también quiero saber el índice de ese valor máximo en C.

Parece que debería ser un problema fácil, pero me tiene perplejo.

Gracias por su ayuda!

Respuesta

1

Si conoces a los índices de la máxima en C_sub, y usted sabe la posición de C_sub dentro C, sólo tiene que sumarlos (y restar 1 para Matlab indexación) para obtener los índices de la máxima relativa a C.

0

¿Qué hay de:

mask = nan(size(C)); 
mask(C_sub_indices) = 1; 
[max_C, imax] = max(C .* mask); 

En ese código, C_sub_indices es la expresión de índice aplicado a C que produjo C_sub. Este código puede no funcionar si C_sub no es una submatriz de C (por ejemplo, si reorganiza las filas o columnas).

+0

Umm, dividir por cero da el infinito? –

+0

Lo acabo de arreglar; el objetivo es obtener NaN, no infinito. –

2

Supongamos que C_sub fue creado por

C_sub = C(rows,cols); 

donde rows y cols son vectores de índices. Guarde esos vectores rows y cols en algún lugar donde pueda volver a utilizarlos, si no lo ha hecho aún.

[max_C_sub, ind_C_sub] = max(C_sub(:)); 
[ypeak_sub, xpeak_sub] = ind2sub(size(C_sub), ind_C_sub); 
xpeak = cols(xpeak_sub); 
ypeak = rows(ypeak_sub); 

O si rows y/o cols era un vector de Logicals en lugar de un vector de índices, que pueden convertirlos utilizando find, y luego seguir las indicaciones anteriores.

rows_ind = find(rows_logical); 
1

Tuve un problema similar una vez, así que escribí una pequeña utilidad para hacer esto. Busque Min2 and Max2 en el intercambio de archivos. Estas herramientas le permiten especificar un subconjunto de las filas y/o las columnas de la matriz dada para buscar.

Haga lo mismo por usted mismo. Cada vez que necesite una herramienta en MATLAB, escríbala. En poco tiempo, habrá creado una buena caja de herramientas con herramientas adaptadas a sus necesidades especiales. Por supuesto, mire primero el intercambio de archivos, ya que hay muchas posibilidades de que lo que necesita ya haya sido escrito y publicado allí.

0

También puede probar este script:

A=magic(5) 
[x,y]=find(A==max(max(A))) %index maximum of the matrix A 
A_max=A(x,y) 
[x1,y1]=find(A==min(max(A))) %index minimum of the matrix A 
A_min=A(x1,y1) 
Cuestiones relacionadas