2016-11-06 4 views
1

私は0と1の行列を持っています。行列の任意の与えられた列は、ゼロで満ちているか、または1つしかありません。0 - matlabと異なる値を持つ行はどれですか?

例えば:

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]; 

私は1が、それは私の最大行数を与える必要があり、列に存在しない場合は私に各1のライン位置を与えるベクトルBを取得したいです。例:

B = [2 5 4 5 5]; 

これを取得する簡単な方法はありますか?

答えて

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. 
0

あなたの2出力バージョンを使用することができmaxであり、これは、各最大値のn。ゼロのみからなる列の場合、最大値は最初の行にあるので、見つかった最大値が0または1

関連する問題