How I can vectorize the next code?

Hello. M is a matrix and v and w are vectors of the same length containing some indices of M. I want to vectorize the following code (without using loops)
for i=1:length(v);
M(v(i),w(i)) = 1;
end

回答 (3 件)

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 10 月 1 日
編集済み: Azzi Abdelmalek 2012 年 10 月 1 日

2 投票

M=magic(5); % example
v=1:2;
w=3:4
idx=sub2ind(size(M),v,w)
M(idx)=1
Image Analyst
Image Analyst 2012 年 10 月 1 日

0 投票

You simply do
M(v, w) = 1;
Here's proof:
M = magic(10)
v = randi(10, 5,1)
w = randi(10, 5,1)
M(v,w) = 1

2 件のコメント

Alfredo Rojas
Alfredo Rojas 2012 年 10 月 1 日
This code assigns 1 to each combinations of indices on v and w
Image Analyst
Image Analyst 2012 年 10 月 1 日
編集済み: Image Analyst 2012 年 10 月 1 日
Ah, you're right, that won't work (though it seems like it would). Use Azzi's code then.
Andrei Bobrov
Andrei Bobrov 2012 年 10 月 1 日
編集済み: Andrei Bobrov 2012 年 10 月 1 日

0 投票

M = randi([100,300],10);
v = randi(10,7,1);
w = randi(10,7,1);
M(v + size(M,1)*(w-1)) = 1

この質問は閉じられています。

質問済み:

2012 年 10 月 1 日

閉鎖済み:

2021 年 8 月 20 日

Community Treasure Hunt

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

Start Hunting!

Translated by