八度矢量化循环:对于i = 1:大小(v,1)v(i,y(i))= 1;结束

时间:2013-11-21 09:15:00

标签: matlab matrix octave vectorization

假设:

v = zeros(4,3)

y = [1;2;1;3]

任何方式执行以下操作:

for i = 1:size(v,1) 
    v(i,y(i)) = 1;
end

以矢量化方式?

例如,以下内容不起作用:

v(:,y) = 1

TIA

2 个答案:

答案 0 :(得分:2)

不确定这是否符合您的目的:

v(full(sparse(1:size(v, 1), y, true))) = 1

答案 1 :(得分:1)

这是重复的,我已经看过它曾经问了几次Matlab。但我现在无法找到它们。以下是使用linear indexing的一种方法,您可以使用sub2ind函数找到它:

v(sub2ind(size(v), (1:length(y))', y)) = 1

分解

colIndex = y;
rowIndex = 1:length(y);
linearIndex = sub2ind(size(v), rowIndex', colIndex);
v(linearIndex) = 1;