Remove a column from a matrix in GNU Octave

前端 未结 4 705
深忆病人
深忆病人 2021-02-02 05:45

In GNU Octave, I want to be able to remove specific columns from a matrix. In the interest of generality. I also want to be able to remove specific rows from a matrix.

相关标签:
4条回答
  • 2021-02-02 06:11

    In case you don't know the exact number of columns or rows you can use the magic "end" index, e.g.:

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

    This also allows you to slice rows or columns out of a matrix without having to reassign it to a new variable.

    0 讨论(0)
  • 2021-02-02 06:11

    The reverse method of doing this:

    columns_you_want_to_keep = [1, 3, 5]
    new_matrix = my_matrix(:,columns_you_want_to_keep)
    
    0 讨论(0)
  • 2021-02-02 06:28

    GNU Octave delete Columns 2 and 4 from a Matrix

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

    Prints:

    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) 
    

    Prints:

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

    Time complexity

    GNU Octave's CPU complexity for slicing and broadcasting here is a fast linear time O(n * c) where n is number of rows and c a constant number of rows that remain. It's C level single-core vectorized but not parallel.

    Memory complexity

    Working memory complexity is linear: O(n * 2) C makes a clone of the two objects, iterates over every element, then deletes the original.

    The only time speed will be a problem is if your matrices are unrealistically wide, tall, or have a number of dimensions that blow out your fast memory, and speed is limited by the transfer speed between disk and memory.

    0 讨论(0)
  • 2021-02-02 06:28

    How to remove multiple columns in octave:

    How to remove columns 2 and 4:

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

    Illustrated:

    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 
    
    0 讨论(0)
提交回复
热议问题