Matrix 从GNU倍频程的矩阵中删除列
在GNUOctave中,我希望能够从矩阵中删除特定列。为了一般性的利益。我还希望能够从矩阵中删除特定行 假设我有这个: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列,
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
这还允许您从矩阵中分割行或列,而无需将其重新分配给新变量 这么干净:我要找的东西真灵巧!