我想优化以下代码示例:
%Example definition
A = rand(40,10000,250);
B = rand(40,10000,250);
%Euclidean
seuc = sum((A-B).^2, 3);
你知道如何加快速度吗?或者它已经针对MATLAB进行了优化?
答案 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矩阵,因此更适合它。