在 MATLAB 中加速特殊情况下的欧氏距离

Speed-up special case euclidean distance in MATLAB

我想优化以下代码示例:

%Example definition
A = rand(40,10000,250);
B = rand(40,10000,250);

%Euclidean
seuc = sum((A-B).^2, 3);

你知道如何加快速度吗?或者它已经针对 MATLAB 进行了优化?

您可以使用二维矩阵运算进一步加快速度,如下所示:

reshape(sum((reshape(A, [], size(A, 3))-reshape(B, [], size(A, 3))).^2, 2), size(A, 1), size(A, 2))

这将执行时间从约 0.5 秒减少到约 0.3 秒。

方法

我首先使用重塑(将第一维和第二维结合在一起)将两个输入矩阵转换为二维矩阵:

reshape(A, [], size(A, 3))
reshape(B, [], size(A, 3))

最后,我将总和的结果(一维向量)重塑为所需的二维向量:

reshape(..., size(A, 1), size(A, 2))

为什么这样更快?

我不确定。我想 MATLAB 更常用于 2D 矩阵而不是 3D 矩阵,因此针对它进行了更好的优化。