Matrix 从GNU倍频程的矩阵中删除列

Matrix 从GNU倍频程的矩阵中删除列,matrix,octave,Matrix,Octave,在GNUOctave中,我希望能够从矩阵中删除特定列。为了一般性的利益。我还希望能够从矩阵中删除特定行 假设我有这个: 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列,

在GNUOctave中,我希望能够从矩阵中删除特定列。为了一般性的利益。我还希望能够从矩阵中删除特定行

假设我有这个:

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列,这使我的头部受伤。一定有更好的办法

GNU倍频程从矩阵中删除第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
1   0   0   0   0
0   0   1   0   0
0   0   0   0   1
GNU倍频程从矩阵中删除第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
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列和第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 

与此相反的方法是:

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

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

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

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

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

这么干净:我要找的东西真灵巧!