matlab - 使用 "find"命令累加值 "without for loops"

标签 matlab loops for-loop find

我将使用 find 从一个矩阵(名为 lag)中获取索引,然后将它们从另一个矩阵(H)中的对应值相加).这将需要一个 for 循环。 (矩阵是二维的。)

(此处使用max 来暗示一个通用示例)

D=zeros(max, 1)
for j = 1:max
    ind = find(lag==j)
    D(j) = sum(H(ind))
end

这是一个 4 点示例。点位于 (1,1)、(1,2)、(2,1)、(2,2)。这是地统计学方法的一部分。 H 中计算了所有点之间的距离。 lagsH 但向下舍入然后加 1 以将距离与其最接近的整数相关联(称为滞后的分类)。我现在想将每个 lag 的总距离加到向量 D 中。

lag (4x4) - 存储一般滞后间隔

1  2  2  2
2  1  2  2
2  2  1  2
2  2  2  1

H (4x4) - 存储点之间的距离

0   1   1   1.414
1   0   1.414   1
1   1.414   0   1
1.414   1   1   0

我可以在没有 for 循环的情况下做到这一点吗?

最佳答案

这很容易用 accumarray 完成:

D = accumarray(lag(:), H(:));

这会为每个由第一个参数的值定义的组(lag 线性化为列向量)。

关于matlab - 使用 "find"命令累加值 "without for loops",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137591/

相关文章:

image - 如何使用 matlab 正确地分割细胞图像?

c++ - 使用 STL 算法查找集合中的前两个不相邻元素

python - 我怎么能在列表理解中重写这个 for 循环

r - 提高 R 的效率(矢量化?)

java - 通过 java 驱动程序将数据从 MongoDB 转换为原生 MATLAB 格式

matlab - 有人可以指点我一个在线/免费的 MATLAB 编译器/解释器或解释一下这个 MATLAB 代码中发生了什么吗?

matlab - 将大矩阵拆分为新的较小矩阵

Scala - 嵌套循环、for 理解和最终迭代的类型

r - 如何更快地迭代和测试 R 中数据帧的列?

delphi - for在TObjectList中怎么办?