【问题标题】:How to vectorize this Matlab loop如何向量化这个 Matlab 循环
【发布时间】:2015-03-31 19:55:37
【问题描述】:

我需要一些帮助来矢量化以下操作,因为我有点困惑。

所以,我有一个m-by-2 矩阵A 和n-by-1 向量b。我想创建一个n-by-1 向量c,其条目应该是A 第二列的值,其行由b 的对应值所在的行给出...

不确定我是否足够清楚。无论如何,下面的代码确实可以正确计算c,因此您可以了解我想要的输出是什么。但是,我想对这个函数进行矢量化,因为我真正的 n 和 m 大约有数千个。

请注意,b 的值是非整数,不一定等于 A 第一列中的任何值(这些值也可能是非整数!)。

m = 5; n = 10;

A = [(0:m-1)*1.1;rand(1,m)]'
b = (m-1)*rand(n,1)

[bincounts, ind] = histc(b,A(:,1))

for i = 1:n
    c(i) = A(ind(i),2);
end

【问题讨论】:

  • @Divakar 嗯...是的,我相信这实际上是解决方案! :) 你能回答我会接受它。

标签: matlab vectorization


【解决方案1】:

你只需要:

c = A(ind,2);

【讨论】:

  • 我不够清楚。 b 可能是非整数,并且可能与 A(:,1) 中的任何值都不完全匹配
  • 你很亲密!编辑c = A(ind,2)?此外,对于更新后的代码,即使c = A(ceil(b),2) 似乎也可以避免histc。
  • @Divakar 恐怕使用ceil() 的第二种解决方案不可行,因为A(:,1) 是随机的非整数单调递增的数字。
  • @Divakar 听起来你应该在这里获得荣誉。也许添加您自己的答案?
  • @eigenchris 哦,不,你在问题的编辑之前就知道了,你做到了!确保在适用于 OP 的解决方案代码中进行编辑。
猜你喜欢
  • 2012-10-24
  • 2014-05-16
  • 1970-01-01
  • 2019-01-30
  • 2015-07-06
  • 2013-02-18
  • 1970-01-01
  • 2023-03-22
相关资源
最近更新 更多