Matlab for 循环替换

标签 matlab matrix

我正在尝试减少代码中的循环量以加快计算速度。我遇到了正在用循环完成的部分代码,但我看不到解决方案。

我有一个由各种粒子的 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/

相关文章:

matlab - 如何在 MATLAB 中的 x 轴上绘制离散点数组 [x1,...xn]

linux - 使用模式返回完整目录

python - 矩阵分配到位?

java - 如何确定矩阵中相同邻居的数量?

algorithm - 对于矩阵中的所有标记区域,找到它们的顶点进行绘制

matlab - 在 Octave/Matlab 中生成具有唯一行的随机二维矩阵

string - 如何在元胞数组中搜索特定字符串

Python:TypeError:列表索引必须是整数,而不是 str

r - bigmatrix : Error in CreateFileBackedBigMatrix(as. 字符(后备文件),as.character(后备路径)

matlab - 向矩阵中添加一行