La idea de un índice lineal para matrices en matlab es importante. Una matriz en MATLAB es realmente solo un vector de elementos, colgado en la memoria. MATLAB le permite usar un índice de fila y columna, o un índice lineal único. Por ejemplo,
A = magic(3)
A =
8 1 6
3 5 7
4 9 2
A(2,3)
ans =
7
A(8)
ans =
7
Podemos ver el orden en que se almacenan los elementos en la memoria desenrollando la matriz en un vector.
A(:)
ans =
8
3
4
1
5
9
6
7
2
Como se puede ver, el elemento octavo es el número 7. De hecho, el hallazgo función devuelve sus resultados como un índice lineal.
find(A>6)
ans =
1
6
8
El resultado es, podemos acceder a cada elemento a su vez de una matriz general de n-d usando un solo bucle. Por ejemplo, si quisiéramos cuadrar los elementos de A (sí, ya sé que hay mejores maneras de hacer esto), se podría hacer esto:
B = zeros(size(A));
for i = 1:numel(A)
B(i) = A(i).^2;
end
B
B =
64 1 36
9 25 49
16 81 4
Hay muchas circunstancias en las que el índice lineal es más útil. La conversión entre el índice lineal y dos subíndices dimensionales (o superiores) se logra con las funciones sub2ind e ind2sub.
El índice lineal se aplica en general a cualquier matriz en matlab. Entonces puede usarlo en estructuras, arreglos de celdas, etc. El único problema con el índice lineal es cuando se hacen demasiado grandes. MATLAB usa un entero de 32 bits para almacenar estos índices. Entonces, si su matriz tiene más de un total de 2^32 elementos, el índice lineal fallará. En realidad, solo es un problema si usa matrices dispersas a menudo, cuando ocasionalmente esto puede causar un problema. (Aunque no uso una versión de MATLAB de 64 bits, creo que el problema se ha resuelto para las personas afortunadas que sí lo hacen).)
Nota terminológica de Matlab: Matlab tiene una pequeña cantidad de tipos de datos básicos. Los más importantes son: struct, matrix y cell array. Cuando se hace referencia a partes de una matriz, es común usar el término "elemento" y reservar el término "celda" para referirse a partes de una matriz de células. Las matrices y matrices de celdas tienen numerosas diferencias sintácticas y semánticas, aunque ambas son estructuras de datos en N dimensiones. –
Observado y cambiado. ¡Gracias! – rlbond
¿Puedo preguntar para qué necesita la iteración? Tal vez hay una forma "vectorizada" de hacerlo en su lugar ... –