【问题标题】:Octave vectorize loop: for i = 1:size(v,1) v(i,y(i)) = 1; end八度向量化循环: for i = 1:size(v,1) v(i,y(i)) = 1;结尾
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 只有一个问题。为什么不直接使用:full(sparse(1:size(v, 1), y, 1 ))?为什么最后分配给 1?
  • @user2051561 实际上没有具体原因。 :)
【解决方案2】:

这是重复的,我已经看到它向 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;

【讨论】:

  • 这也有效。给尤里绿色,因为他先回答。也感谢您给出的解释。谢谢。
  • @user2051561 哈哈没问题,虽然技术上我领先了 19 秒 ;)
  • 糟糕。 8-( 抱歉。我们可以检查谁先回答吗?我假设输入顺序显示了这一点。
  • @user2051561 别担心。如果您将鼠标悬停在已回答的时间(即 4 小时前的位)上,那么它会在工具提示中告诉您。该顺序基于投票,这更有意义,因为您希望最正确的答案位于顶部,而不是第一个答案
猜你喜欢
  • 2018-12-12
  • 2017-05-17
  • 1970-01-01
  • 2014-08-09
  • 2016-03-18
  • 2012-01-13
  • 2015-08-17
  • 2015-05-24
相关资源
最近更新 更多