从GNU Octave中的矩阵中删除一列

时间:2012-09-12 14:25:55

标签: matrix octave

在GNU Octave中,我希望能够从矩阵中删除特定的列。为了普遍性。我还希望能够从矩阵中删除特定的行。

假设我有这个:

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

我想删除第2列和第4列,但是当我删除第2列时,第4列的位置已经移到第3列,这让我头疼。必须有更好的方法!

4 个答案:

答案 0 :(得分:60)

如果您不知道确切的列数或行数,可以使用魔术“结束”索引,例如:

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

这也允许您从矩阵中切割行或列,而无需将其重新分配给新变量。

答案 1 :(得分:56)

GNU Octave删除Matrix中的第2列和第4列

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

打印:

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

GNU Octave从矩阵中删除第2行和第4行:

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

打印:

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

时间复杂度

GNU Octave用于切片和广播的CPU复杂度是一个快速线性时间O(n * c),其中n是行数,c是保留的常数行数。它是C级单核矢量化但不平行。

内存复杂性

工作内存复杂度是线性的:O(n * 2) C复制了两个对象,遍历每个元素,然后删除原始内容。

唯一的时间速度是一个问题,如果你的矩阵是不切实际的宽,高,或有多个维度,吹掉你的快速内存,速度受磁盘和内存之间的传输速度限制。

答案 2 :(得分:12)

执行此操作的相反方法:

columns_you_want_to_keep = [1, 3, 5]
new_matrix = my_matrix(:,columns_you_want_to_keep)

答案 3 :(得分:8)

如何删除八度中的多个列:

如何删除第2列和第4列:

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

画报:

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