行列への代入について

130 Ansichten (letzte 30 Tage)
Kenta
Kenta am 5 Mai 2019
Kommentiert: Kenta am 6 Mai 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文を回避するようなコードを想像しています。よろしくお願いいたします。

Akzeptierte Antwort

Tohru Kikawada
Tohru Kikawada am 5 Mai 2019
Bearbeitet: Tohru Kikawada am 5 Mai 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 Kommentar
Kenta
Kenta am 6 Mai 2019
Kikawada 様
ご回答ありがとうございます。sub2indについて教えていただき、誠にありがとうございました。また、参考リンクも教えていただき、ありがとうございます。
望む形で、行列への代入を行うことができました。他の場面でも広く使えそうです。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!