我有一个零和一个矩阵。矩阵的任何给定列都是零或者只有一个。
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];
任何简单的方法来获得这个?
答案 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)