3

私は 2 つの 2 次元行列 A、B を持っています。ここで、B は A の (行単位の) 順列によって生成されます。A にはいくつかの反復レコードがあります (B にもそうです)。B を生成したマッピングを見つけたいです。私は Matlab を使用しています。私には1つの解決策で十分です。

例:

A = [ 2 3 4; 4 5 6; 2 3 4];
B = [ 4 5 6; 2 3 4; 2 3 4];

マッピングは次のようになります。

p = [3 1 2]   // I want this mapping, however the solution p= [2 1 3] is also correct and acceptable

ここで、Matlab では A = B(p,:) です。// 編集済み

よろしく

4

3 に答える 3

2

最初にぶら下がっている果物。重複する行
がないとします:

 % compute the permutation matrix
 P = all( bsxfun( @eq, permute( A, [1 3 2]),permute(B,[3 1 2]) ), 3 );
 [~, p] = max(P, [], 2 ); % gives you what you want

重複がある場合は、次の行/列で「同点を解消」する必要がありますP

 n = size(A,1);
 bt = abs( bsxfun(@minus, 1:n, (1:n)' ) )/n; %//'
 [~, p] = max( P+bt, [], 2 );
于 2013-06-17T14:02:56.073 に答える