What is the inverse of find() function in matlab

后端 未结 2 427
长情又很酷
长情又很酷 2021-01-20 02:37

In Matlab I can find all non zero entries in a vector like this:

>> v = [0 1 0 0 1]

v =

     0     1     0     0     1

>> indices = find(v)

i         


        
相关标签:
2条回答
  • 2021-01-20 03:15

    i used to use sparse and full but now i switched to accumarray, because it has simpler format.

    in your example:

       v=accumarray([2;5],1)'
    

    additionally, you can also cycle values (i think), according to the first matlab example:

    Create a 5-by-1 vector, summing values for repeated 1-D subscripts:
       subs = [1; 2; 4; 2; 4];
       A = accumarray(subs, 101:105)
    

    of course, according to its name, this function is built to do fancier things.

    0 讨论(0)
  • 2021-01-20 03:26

    you have to know what the shape v is (i.e. how long v is if it's a vector as in your example), but once you know that it's trivial:

    n = 5;
    v_reconstructed = zeros(1, n);
    v_reconstructed(indices) = 1;
    

    if you don't know how long v is then you won't capture any 0s after the last 1 in v...

    BTW if you are working with sparse matrices then you might want this actually:

    v = sparse([0 1 0 0 1]);
    v_reconstructed = full(v);
    
    0 讨论(0)
提交回复
热议问题