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!
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.
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.
La méthode inverse de faire ceci:
columns_you_want_to_keep = [1, 3, 5]
new_matrix = my_matrix(:,columns_you_want_to_keep)
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