matrix - resueltos - Eliminar una columna de una matriz en GNU Octave
programas hechos en octave (4)
Cómo eliminar múltiples columnas en octava:
Cómo eliminar las columnas 2 y 4:
columns_to_remove = [2 4];
matrix(:,columns_to_remove)=[]
Ilustrado:
mymatrix = eye(5)
mymatrix =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
columns_to_remove = [2 4];
mymatrix(:,columns_to_remove)=[]
mymatrix =
1 0 0
0 0 0
0 1 0
0 0 0
0 0 1
En GNU Octave, quiero poder eliminar columnas específicas de una matriz. En interés de la generalidad. También quiero poder eliminar filas específicas de una matriz.
Supongamos que tengo esto:
mymatrix = eye(5)
mymatrix =
Diagonal Matrix
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
Quiero eliminar las columnas 2 y 4, pero cuando elimino la columna 2, la posición de la columna 4 se ha movido a la columna 3, y eso me daña la cabeza. ¡Tiene que haber una mejor manera!
El método inverso de hacer esto:
columns_you_want_to_keep = [1, 3, 5]
new_matrix = my_matrix(:,columns_you_want_to_keep)
En caso de que no conozca el número exacto de columnas o filas, puede usar el índice mágico "final", por ejemplo:
mymatrix(2:end,:) % all but first row
Esto también le permite cortar filas o columnas de una matriz sin tener que reasignarla a una nueva variable.
GNU Octave elimina las columnas 2 y 4 de una matriz
mymatrix = eye(5);
mymatrix(:,[2,4]) = [];
disp(mymatrix)
Huellas dactilares:
1 0 0
0 0 0
0 1 0
0 0 0
0 0 1
GNU Octave elimina las Filas 2 y 4 de una Matriz:
mymatrix = eye(5);
mymatrix([2,4],:) = [];
disp(mymatrix)
Huellas dactilares:
1 0 0 0 0
0 0 1 0 0
0 0 0 0 1
Complejidad del tiempo
La complejidad de la CPU de GNU Octave para cortar y difundir aquí es un tiempo lineal rápido O(n * c)
donde n es el número de filas y ca un número constante de filas que permanecen. Es de nivel C de un solo núcleo vectorizado pero no paralelo.
Complejidad de la memoria
La complejidad de la memoria de trabajo es lineal: O(n * 2)
C hace un clon de los dos objetos, itera sobre cada elemento y luego elimina el original.
La única vez que la velocidad será un problema es si sus matrices son irrealmente anchas, altas o tienen varias dimensiones que hacen volar su memoria rápida, y la velocidad está limitada por la velocidad de transferencia entre el disco y la memoria.