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

时间:2017-08-01 10:43:56

标签: matlab performance euclidean-distance

我想优化以下代码示例:

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

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

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

1 个答案:

答案 0 :(得分:0)

您可以通过使用2D矩阵操作进一步加快速度,如下所示:

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

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

<强>方法

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

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

最后,我将总和(一维向量)的结果重新形成为所需的2D向量:

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

为什么这会更快?

我不确定。我猜MATLAB更常用于2D矩阵而不是3D矩阵,因此更适合它。