哪些行的值与零不同 - matlab

时间:2016-11-06 13:46:27

标签: matlab matrix logical-operators

我有一个零和一个矩阵。矩阵的任何给定列都是零或者只有一个。

E.g:

A = [0 0 0 0 0; 
     1 0 0 0 0 
     0 0 0 0 0 
     0 0 1 0 0
     0 0 0 0 1];

我想得到向量B,它给出了每个1的行位置。如果列上没有1,它应该给我最大行数。例如:

B = [2 5 4 5 5];

任何简单的方法来获得这个?

2 个答案:

答案 0 :(得分:1)

矩阵乘法的可能解决方案:

A = [0 0 0 0 0; 
     1 0 0 0 0 
     0 0 0 0 0 
     0 0 1 0 0
     0 0 0 0 1];
[r ,~] = size(A);
B = (1:r) * A;
B(B==0)=r;

与其他方法的比较:

 n = 9000;
 ro = randperm(n,4000);
 co = randperm(n , 4000);
 A = accumarray([ro(:) co(:)],1); 


 disp('------matrix multiplication---------:')
 tic
    [r ,~] = size(A);
    B = (1:r) * A;
    B(B==0)=r;
 toc


 disp('------find---------:')

tic
    [r,~]=find(A);           
    B = double(any(A));  
    B(B==1)= r;   B(B==0)=n;
toc

<强>结果

------matrix multiplication---------:
Elapsed time is 0.0569789 seconds.
------find---------:
Elapsed time is 0.252345 seconds.

答案 1 :(得分:0)

您可以使用graph的双输出版本,它会给出每个最大值的位置。对于仅包含零的列,最大值将位于第一行,因此您需要通过检查找到的最大值是1还是[m, result] = max(A, [], 1); % maximum of each column, and its row index result(~m) = size(A, 1); % if the maximum was 0: modify result

来更正此值
labelled