行列への代入について

124 visualizzazioni (ultimi 30 giorni)
Kenta
Kenta il 5 Mag 2019
Commentato: Kenta il 6 Mag 2019
point=[1 2;2 3;3 2; 1 3];
for i=1:size(point,1)
M(point(i,1),point(i,2))=1;
end
3×3のゼロ行列があったとします。そこの任意の座標に1という値を代入したいときどのようにすればよいでしょうか。
例えば、座標(1,2), (2, 3), (3, 2), (1, 3)に1という値を代入したいとします。
その場合、上のコードにあるように、for文で一つずつ代入すれば求める行列を得ることができます。
これをfor文を使わず行うことは可能でしょうか。
例えば、行列のなかで、ある条件を満たす座標は、for文を使って探索せずとも、find(M==1)などを使えば求めることができると思います。
このように、関数や代入法を使ってfor文を回避するようなコードを想像しています。よろしくお願いいたします。

Risposta accettata

Tohru Kikawada
Tohru Kikawada il 5 Mag 2019
Modificato: Tohru Kikawada il 5 Mag 2019
線形インデックスを使うのがよいかもしれません。
point=[1 2;2 3;3 2; 1 3];
M=zeros(3,3);
M(sub2ind(size(M),point(:,1),point(:,2)))=1;
添字から線形インデックスへの変換は下記をご覧ください。 https://jp.mathworks.com/help/matlab/ref/sub2ind.html
下記でも線形インデックスについて少しだけ触れられています。 https://jp.mathworks.com/help/matlab/math/array-indexing.html
  1 Commento
Kenta
Kenta il 6 Mag 2019
Kikawada 様
ご回答ありがとうございます。sub2indについて教えていただき、誠にありがとうございました。また、参考リンクも教えていただき、ありがとうございます。
望む形で、行列への代入を行うことができました。他の場面でも広く使えそうです。

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!