我正在尝试减少代码中的循环量以加快计算速度。我遇到了正在用循环完成的部分代码,但我看不到解决方案。
我有一个由各种粒子的 x
y
坐标组成的矩阵。
例如,生成为 rand(2,5)
0.8715 0.0363 0.0657 0.6289 0.3279
0.0272 0.4380 0.9794 0.6563 0.4755
我想要一个 (5,5,2)
中的矩阵,每个粒子之间有一个向量。
这将是一个 x
长度为 (:,:,1)
和 y 长度为 (:,:,2)
的矩阵。
最佳答案
您可以使用 bsxfun
来实现此目的,但您还需要 permute
来“3D 转置”坐标矩阵。 permute
将坐标
分别转换为 5×1×2 和 1×5×2 数组:
coordinates = rand(2,5);
%# subtract all coordinate pairs from one another
vectorArray = bsxfun(@minus,permute(coordinates,[2,3,1]),permute(coordinates,[3 2 1]));
size(vectorArray)
ans =
5 5 2
请注意,vectorArray 是反对称的,因此如果遇到空间问题,您可能需要查看 pdist
。
关于Matlab for 循环替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9482749/