2

私はMATLABに次のような行列を持っています

t2 =

    0.4366    0.4298    0.5907
    0.9401    0.5358    0.6136
    0.2305    0.5212    0.9759
    0.9545    0.5572    0.9042

各行で最大の要素を取得し、それらを 1 に設定し、残りを 0 に設定します。そう

t2 = 

      0    0    1
      1    0    0
      0    0    1
      1    0    0

最小限のコマンドでそれを行うにはどうすればよいですか?

4

4 に答える 4

2

これは別の例です。エレガントではありませんが、それでも素晴らしく、理解できます。そして、仕事を成し遂げます。

for i = 1:length(t2(:,1))
    t2(i,:)=t2(i,:)==max(t2(i,:));
end
于 2013-07-19T17:58:29.723 に答える
0

sparseへの 2 番目の出力引数max:

[~,icol] = max(M,[],2);
B = full(sparse(1:size(M,1),icol,1,size(M,1),size(M,2)))

またはspconvert代わりにsparse

B = full(spconvert([(1:size(M,1))',icol,ones(size(M,1),1);[size(M) 0]]))

テストデータ:

M = [0.4366,0.4298,0.5907;...
     0.9401,0.5358,0.6136;...
     0.2305,0.5212,0.9759;...
     0.9545,0.5572,0.9042]; % OP's t2
于 2014-04-03T00:57:18.760 に答える
0

これを MATLAB ですぐに実行するための正確な構文は覚えていませんが、NumPy 配列を使用して Python で実行する方法を次に示します。構文は MATLAB でもほぼ同じです。Noneただし、配列の次元を拡張するために使用したトリックは使用しません。

(注:私はあなたのものではなく、私自身のランダムなデータセットを使用しました)

In [311]: t2/t2.max(axis=1)[:,None]
Out[311]:
array([[ 0.96452099,  0.19900529,  1.        ],
       [ 1.        ,  0.36581245,  0.91631999],
       [ 0.62747397,  0.96969966,  1.        ],
       [ 0.07238682,  0.59855665,  1.        ]])

In [312]: np.floor(t2/t2.max(axis=1)[:,None])
Out[312]:
array([[ 0.,  0.,  1.],
       [ 1.,  0.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.]])
于 2013-07-19T16:38:06.310 に答える