How to delete zeros from matrix in MATLAB?

前端 未结 2 465
你的背包
你的背包 2021-01-20 22:56

Here is my problem:

I have a nxn matrix in matlab. I want to delete all the zeros of this matrix and put the rows of it in vectors. For n=4

相关标签:
2条回答
  • 2021-01-20 23:08

    Slightly faster than Divakar's answer:

    nzv = arrayfun(@(n) nonzeros(A(n,:)), 1:size(A,1), 'uniformoutput', false);
    

    Benchmarking

    Small matrix

    A = randi([0 3],100,200);
    repetitions = 1000;
    
    tic
    for count = 1:repetitions
      nzv =cellfun(@(x) nonzeros(x),mat2cell(A,ones(1,size(A,1)),size(A,2)),'uni',0);
    end
    toc
    
    tic
    for count = 1:repetitions
      nzv = arrayfun(@(n) nonzeros(A(n,:)), 1:size(A,1), 'uniformoutput', false);
    end
    toc
    
    Elapsed time is 3.017757 seconds.
    Elapsed time is 2.025967 seconds.
    

    Large matrix

    A = randi([0 3],1000,2000);
    repetitions = 100;
    
    Elapsed time is 11.483947 seconds.
    Elapsed time is 5.563153 seconds.
    
    0 讨论(0)
  • 2021-01-20 23:25

    Convert to a cell array such that you have a cell for each row and then use nonzeros for each cell, that deletes zeros and finally store them into separate variables.

    Code

    nzv =cellfun(@(x) nonzeros(x),mat2cell(A,ones(1,size(A,1)),size(A,2)),'uni',0)
    [v1,v2,v3,v4] = nzv{:}
    
    0 讨论(0)
提交回复
热议问题