2017-12-29 36 views
1

行インデックスがベクトルに格納される行列の各行で異なる列を更新する方法はありますか?行インデックスがvecorである行ごとに1つの列を更新する

mx = zeros(10,10); 
cols = [2 3 5 4 6 8 9 1 2 3]'; 
for i = 1:size(mx,1) 
    mx(i,cols(i)) = 1; 
end 
mx 

は、私はforループせずにそれを行うことができるかどうか、

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

質問は生成しますか?

+0

[行と列インデックスベクトルに基づいて新たな行列値を割り当てる]の可能な重複(https://stackoverflow.com/questions/33760043/assign-new-matrix-values-based-on-row-and -column-index-vectors) – ederag

答えて

2

行列の要素を単一の番号でアドレス指定することができます。この場合、要素は列方向に番号が付けられます(1-10は最初の列、11-20はsecound ...)。要素番号を計算する関数はsub2indです。あなたのケースでは非常に簡単です、なぜなら10x10なので、手動でやることができるからですが、私はまだその機能をお勧めします。

mx = zeros(10,10); 
rows = 1:size(mx,1); %create the row indices 
cols = [2 3 5 4 6 8 9 1 2 3]; 
X=sub2ind(size(mx),rows,cols) 
mx(X)=1; 
mx 
+0

ありがとう、sub2indは私が探していたものですが、実際の行列はもちろん10x10よりはるかに大きいです。 –

関連する問題