Matlab 倍频程矢量化环路:对于i=1:size(v,1)v(i,y(i))=1;结束

Matlab 倍频程矢量化环路:对于i=1:size(v,1)v(i,y(i))=1;结束,matlab,matrix,octave,vectorization,Matlab,Matrix,Octave,Vectorization,假设: 及 任何方法都可以执行以下操作: y = [1;2;1;3] 以矢量化的方式 例如,以下操作不起作用: for i = 1:size(v,1) v(i,y(i)) = 1; end TIA这是一个复制品,我已经看到它多次向Matlab询问。但我现在找不到。以下是一种使用方法,您可以使用sub2ind功能找到: v(:,y) = 1 分解它 v(sub2ind(size(v), (1:length(y))', y)) = 1 不确定这是否符合您的目的: colIndex

假设:

任何方法都可以执行以下操作:

y = [1;2;1;3]
以矢量化的方式

例如,以下操作不起作用:

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

TIA

这是一个复制品,我已经看到它多次向Matlab询问。但我现在找不到。以下是一种使用方法,您可以使用
sub2ind
功能找到:

v(:,y) = 1
分解它

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

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

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

这也行得通。把果岭给了尤里,因为他先回答。也感谢你的解释。谢谢。@user2051561哈哈,没问题,虽然技术上我以19秒的优势获得第一名;)哎呀。8-(很抱歉。我们可以检查谁先回答吗?我假设输入顺序显示了这一点。@用户205561不用担心。如果您将光标悬停在回答时间上(即4小时前的位)然后,它会在工具提示中告诉你。顺序基于投票,这更有意义,因为你希望最正确的答案出现在顶部,而不是第一个答案。谢谢编辑。只有一个问题。为什么不直接使用:
full(稀疏(1:size(v,1),y,1))
?为什么最后分配给1?@user205561实际上没有具体原因。:)
colIndex = y;
rowIndex = 1:length(y);
linearIndex = sub2ind(size(v), rowIndex', colIndex);
v(linearIndex) = 1;
v(full(sparse(1:size(v, 1), y, true))) = 1