0

c=bsxfun(@eq,b,a)2つの行列の値を比較するために使用します。しかし、一致しない値を数えるのは難しいと思います。たとえば、私はこのコードを使用します

a = [1 2 3 4 7 6; ...
     3 2 4 6 7 2 ];
b = [1 3 2 4 5 7; ...
     3 4 5 6 7 2; ...
     2 3 4 5 6 6];
for i = 1:size(a,1)
    c= bsxfun(@eq,a(i,:),b)
    match = sum(c')
end

と結果

 c =
   1     0     0     1     0     0
   0     0     0     0     1     0
   0     0     0     0     0     1

 match =
   2     1     1

c =
   0     0     0     0     0     0
   1     0     0     1     1     1
   0     0     1     0     0     0

match =
   0     4     1

値の最初の一致行列を2番目の一致で保存したい。例えば

total_match = 
   2 5 2

何か提案はありますか?ありがとう..

4

1 に答える 1

0

ループの必要はありません

match = bsxfun( @eq, permute( a, [1 3 2]), permute( b, [3 1 2] ) ); % result in 2x3x6 boolean
match = sum( match, 3 ); % sum matches across rows of a--b
total_match = sum( match, 1 ); 

PSMatlabでは変数名として
使用ijないことをお勧めします。

于 2013-03-24T07:06:02.410 に答える