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일

3 개 추천

線形インデックスを使うのがよいかもしれません。
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개)

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

질문:

2019년 5월 5일

댓글:

2019년 5월 6일

Community Treasure Hunt

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

Start Hunting!