行列への代入について

147 次查看(过去 30 天)
Kenta
Kenta 2019-5-5
评论: Kenta 2019-5-6
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文を回避するようなコードを想像しています。よろしくお願いいたします。

采纳的回答

Tohru Kikawada
Tohru Kikawada 2019-5-5
编辑:Tohru Kikawada 2019-5-5
線形インデックスを使うのがよいかもしれません。
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 个评论
Kenta
Kenta 2019-5-6
Kikawada 様
ご回答ありがとうございます。sub2indについて教えていただき、誠にありがとうございました。また、参考リンクも教えていただき、ありがとうございます。
望む形で、行列への代入を行うことができました。他の場面でも広く使えそうです。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!