Buenos días.
Necsito extraer todas las columnas de una matriz de orden elevado (miles de columnas), como matrices individuales. He pensado que se pudiera resolver con la utilizaciín de algúna función lógica (xejemplo bucle for...), pero mi ni vel es bñasico y no alcanzo a ello. Os pido ayuda, y para una mejor comprensión os pongo un ejemplo:
si tengo la matriz A = [3 1 2 9; 4 1 5 2; 1 3 7 4]
mi objetivo es de una forma automatizada extraer los siguientes vectores columna (matrices 4x1):
X1=[3; 4; 1]
X2=[1; 1; 3]
X3=[2; 5; 7]
X4=[9; 2; 4]
Muchas gracias, y un saludo.
Jose Manuel
No necesitas ningún bucle explícito para esto, MATLAB te deja extraer todas las columnas de una matriz directamente y guardarlas en una estructura que las mantenga como matrices individuales: un cell array.
M = tu_matriz; % la matriz de miles de columnas
columnas = num2cell(M, 1); % divide por columnas (dim=1 en num2cell significa "a lo largo de la dimensión 1")
Con esto, columnas{1} es tu primera columna como vector, columnas{2} la segunda, y así con todas. Es mucho más rápido que un bucle for haciendo columnas{i} = M(:,i) uno a uno, porque num2cell está vectorizado internamente.
Si lo que necesitas es acceder a cada columna por su índice más adelante en el código, no hace falta ni siquiera separar en variables sueltas, puedes seguir indexando directamente sobre la matriz original con M(:,i), que es la forma más eficiente en memoria (no duplicas datos). El cell array solo compensa si realmente necesitas tratar cada columna como una entidad independiente después (pasarla a una función, iterar sobre ella con un for columna = columnas, etc.).
David