【发布时间】:2013-11-21 09:14:59
【问题描述】:
假设:
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
【问题讨论】:
-
丹,感谢您的编辑。
标签: 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
【问题讨论】:
标签: matlab matrix octave vectorization
不确定这是否符合您的目的:
v(full(sparse(1:size(v, 1), y, true))) = 1
【讨论】:
full(sparse(1:size(v, 1), y, 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;
【讨论】: