La idea de un índice lineal para matrices en matlab es importante. Una matriz en MATLAB es en realidad solo un vector de elementos, encadenados en la memoria. MATLAB le permite utilizar 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 puede ver, el octavo elemento es el número 7. De hecho, la función encontrar devuelve sus resultados como un índice lineal.
find(A>6)
ans =
1
6
8
El resultado es que podemos acceder a cada elemento a su vez de una matriz nd general utilizando un solo ciclo. Por ejemplo, si quisiéramos cuadrar los elementos de A (sí, sé que hay mejores formas de hacerlo), uno 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 subíndices de dos (o más) dimensiones 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, matrices de celdas, etc. El único problema con el índice lineal es cuando se vuelven demasiado grandes. MATLAB utiliza 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 con frecuencia, cuando ocasionalmente esto causará un problema. (Aunque no uso una versión de MATLAB de 64 bits, creo que ese problema se ha resuelto para los afortunados que lo hacen).