1

私は次のようなマトリックスを持っています。

octave:63> a
a =

ans(:,:,1) =

   0.411710   0.947670
   0.068291   0.368340

ans(:,:,2) =

   0.27178   0.56699
   0.54317   0.27393

ans(:,:,3) =

   0.72621   0.44131
   0.22743   0.61914

max関数を使用すると、特定の次元に基づいて最大値のインデックスを取得できます。

octave:64> [a2_val a2_indx] = max(a, [], 2)

a2_indx =

ans(:,:,1) =

   2
   2

ans(:,:,2) =

   2
   1

ans(:,:,3) =

   1
   2

値がゼロのaと同じ行列がある場合、最大位置を1でマークする方法はありますか?フォローのようなもの。

octave:65> z
z =

ans(:,:,1) =

   0   1
   0   1

ans(:,:,2) =

   0   1
   1   0

ans(:,:,3) =

   1   0
   0   1

私は、最大関数のように次元のないソリューションを好みます。

ありがとう。

4

1 に答える 1

1

最も簡単な方法は、おそらくその次元に沿って最大行列を複製し、論理比較を使用することです。

dim = 2; % The dimension along which we max

% Prep a size matrix for the replication
dims = ones( size( size( a ) ) );
dims( dim ) = size( a, dim ); % (all ones except the
                              % dimension that gets maxed)

result = ( a == repmat( max( a, [], dim ), dims ) )
于 2012-04-30T05:02:38.177 に答える