首页 文章

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

提问于
浏览
46

在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 回答

  • 59

    GNU Octave delete Columns 2 and 4 from a Matrix

    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 delete Rows 2 and 4 from a Matrix:

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

    打印:

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

    Time complexity

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

    Memory complexity

    工作内存复杂度是线性的: O(n * 2) C对两个对象进行克隆,遍历每个元素,然后删除原始对象 .

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

  • 10

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

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

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

  • 55

    这样做的相反方法:

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

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

    如何删除第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
    

相关问题