質問: 行列への代入について 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文を回避するようなコードを想像しています。よろしくお願いいたします。
回答: 線形インデックスを使うのがよいかもしれません。 point=[1 2;2 3;3 2; 1 3]; m=zeros(3,3); m(sub2ind(size(m),point(:,1),point(:,2)))=1; 添字から線形インデックスへの変換は下記をご覧ください。 下記でも線形インデックスについて少しだけ触れられています。