Eliminar una columna de una matriz en la octava de GNU


En GNU Octave, quiero poder eliminar columnas específicas de una matriz. En interés de la generalidad. También quiero ser capaz de 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 hace que me duela la cabeza. Tiene que haber una manera mejor!

Author: Gordon Gustafson, 2012-09-12

4 answers

GNU Octave eliminar las columnas 2 y 4 de una Matriz

mymatrix = eye(5); 
mymatrix(:,[2,4]) = []; 
disp(mymatrix)

Impresiones:

1   0   0
0   0   0
0   1   0
0   0   0
0   0   1

GNU Octave eliminar filas 2 y 4 de una Matriz:

mymatrix = eye(5); 
mymatrix([2,4],:) = [];
disp(mymatrix) 

Impresiones:

1   0   0   0   0
0   0   1   0   0
0   0   0   0   1

Complejidad temporal

La complejidad de la CPU de GNU Octave para cortar y transmitir aquí es un tiempo lineal rápido O(n * c) donde n es el número de filas y c un número constante de filas que permanecen. Es de un solo núcleo de nivel C vectorizado pero no paralelo.

Memoria complejidad

La complejidad de la memoria de trabajo es lineal: O(n * 2) C hace un clon de los dos objetos, itera sobre cada elemento, luego elimina el original.

La única velocidad de tiempo será un problema si sus matrices son irrealmente anchas, altas o tienen un número de dimensiones que explotan su memoria rápida, y la velocidad está limitada por la velocidad de transferencia entre el disco y la memoria.

 55
Author: HerrKaputt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-22 15:36:52

En caso de que no sepa el número exacto de columnas o filas, puede usar el índice mágico "end", por ejemplo:

mymatrix(2:end,:)  % all but first row

Esto también le permite cortar filas o columnas de una matriz sin tener que reasignarlas a una nueva variable.

 58
Author: pors,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-27 14:36:01

El método inverso para hacer esto:

columns_you_want_to_keep = [1, 3, 5]
new_matrix = my_matrix(:,columns_you_want_to_keep)
 10
Author: thethakuri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-25 11:37:22

Cómo eliminar varias 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 
 7
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-27 20:17:30