我正在运行一个程序,需要在2D中的一组点上重复使用成对距离计算,然后计算向量.这最终导致我的运行时间出现瓶颈,因此我尝试将我的代码从Matlab重新编写为Julia,以利用其更快的速度.然而,我遇到的问题是我在Julia中编写的函数实际运行速度比我的Matlab实现慢五倍.鉴于朱莉娅的声誉是一种快得多的语言,我假设我做错了什么.
我写了一个简单的例子来说明我所看到的.
朱莉娅代码:
using Distances
function foo()
historyarray = zeros(5000,150,2)
a = randn(150,2)
for i in 1:5000
pd = pairwise(Euclidean(),a.')
xgv = broadcast(-,a[:,1].',a[:,1])
ygv = broadcast(-,a[:,2].',a[:,2])
th = atan2(ygv,xgv)
fv = 1./(pd+1)
xfv = fv*cos(th)
yfv = fv*sin(th)
a[:,1]+= sum(xfv,2)
a[:,2]+= sum(yfv,2)
historyarray[i,:,:] = copy(a)
end
end
Run Code Online (Sandbox Code Playgroud)
Matlab代码:
function foo
histarray = zeros(5000,150,2);
a = randn(150,2);
for i=1:5000
pd = pdist2(a,a);
xgv = -bsxfun(@minus,a(:,1),a(:,1)');
ygv = -bsxfun(@minus,a(:,2),a(:,2)');
th = atan2(ygv,xgv);
fv = 1./(pd+1);
xfv = fv.*cos(th);
yfv = fv.*sin(th);
a(:,1) …Run Code Online (Sandbox Code Playgroud)