Supprimer une colonne d'une matrice dans GNU Octave

Dans GNU Octave, je veux pouvoir supprimer des colonnes spécifiques d'une matrice. Dans l'intérêt de la généralité. Je veux aussi pouvoir supprimer des lignes spécifiques d'une matrice.

Supposons que j'ai ceci:

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

Je veux supprimer les colonnes 2 et 4, mais quand je supprime la colonne 2, La position de la colonne 4 est passée à la colonne 3, et cela me fait mal à la tête. Il doit y avoir un meilleur moyen!

46
demandé sur Gordon Gustafson 2012-09-12 18:25:55

4 réponses

GNU Octave supprime les colonnes 2 et 4 d'une matrice

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

Impressions:

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

GNU Octave supprime les lignes 2 et 4 d'une matrice:

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

Impressions:

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

Le Temps de la complexité

La complexité CPU de GNU Octave pour le découpage et la diffusion ici est un temps linéaire rapide O(n * c) où n est le nombre de lignes et c un nombre constant de lignes qui restent. C'est vectorisé à un seul cœur de niveau C mais pas parallèle.

De Mémoire la complexité

La complexité de la mémoire de travail est linéaire: O(n * 2) C fait un clone des deux objets, itère sur chaque élément, puis supprime l'original.

La seule vitesse de temps sera un problème est si vos matrices sont irréalistes large, grand, ou ont un certain nombre de dimensions qui soufflent votre mémoire rapide, et la vitesse est limitée par la vitesse de transfert entre le disque et la mémoire.

55
répondu HerrKaputt 2018-05-22 15:36:52

Si vous ne connaissez pas le nombre exact de colonnes ou de lignes, vous pouvez utiliser l'index "end" magique, par exemple:

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

Cela permet également de découper des lignes ou des colonnes d'une matrice sans avoir à réaffecter à une nouvelle variable.

58
répondu pors 2015-01-27 14:36:01

La méthode inverse de faire ceci:

columns_you_want_to_keep = [1, 3, 5]
new_matrix = my_matrix(:,columns_you_want_to_keep)
10
répondu thethakuri 2013-11-25 11:37:22

Comment supprimer plusieurs colonnes dans octave:

Comment supprimer les colonnes 2 et 4:

columns_to_remove = [2 4];
matrix(:,columns_to_remove)=[]

Illustré:

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
répondu Eric Leschinski 2012-11-27 20:17:30