行列への代入について

452 views (last 30 days)
Kenta
Kenta on 5 May 2019
Commented: Kenta on 6 May 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文を回避するようなコードを想像しています。よろしくお願いいたします。

Accepted Answer

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

Sign in to comment.

More Answers (0)

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!