【问题标题】:Accessing array elements through a coordinate array [closed]通过坐标数组访问数组元素
【发布时间】:2018-08-09 09:04:10
【问题描述】:

我正在尝试对这几行代码进行矢量化处理,尤其是 for 循环。我的x 是一个[31374230x4] 矩阵,final.p0 是一个包含矩阵p0[1000x1000x500] 的结构。主要思想是截断分配给它的最终矩阵x(i,4)。我想避免 for 循环,它太慢了。有什么想法吗?

final.p0 = zeros(max(x(:,1)),max(x(:,2)),max(x(:,3)));
for i = 1:length(x(:,4)) 
   final.p0(x(i,1),x(i,2),x(i,3)) = x(i,4);  
end

【问题讨论】:

  • 请提供一个包含少量虚拟数据的工作示例。
  • final.p0 = [50x50x100],x = [1000x4]。对于每次迭代,我想截断 final.p0,取 x1、x2、x3 的 50x50x100 值并将 x4 分配给 final.p0。
  • “少量的虚拟数据”是指人们可以复制/粘贴的一些实际数字,以及应该出现在结果中的预期实际数字。

标签: matlab performance for-loop vector vectorization


【解决方案1】:

使用sub2ind 可以轻松避免此循环,如下所示:

index = sub2ind(size(final.p0),x(:,1),x(:,2),x(:,3));
final.p0(index) = x(:,4);

【讨论】:

  • 不错,从未使用过 sub2ind 函数。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 2019-09-17
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多