考虑这个 python 代码,我在其中尝试计算向量到矩阵每一行的欧几里距离。与我能找到的使用 Tullio.jl 的最佳 Julia 版本相比,它非常慢。
python 版本需要30s而 Julia 版本只需要75ms。
我确信我在 Python 方面没有做得最好。有更快的解决方案吗?欢迎使用 Numba 和 numpy 解决方案。
import numpy as np
# generate
a = np.random.rand(4000000, 128)
b = np.random.rand(128)
print(a.shape)
print(b.shape)
def lin_norm_ever(a, b):
return np.apply_along_axis(lambda x: np.linalg.norm(x - b), 1, a)
import time
t = time.time()
res = lin_norm_ever(a, b)
print(res.shape)
elapsed = time.time() - t
print(elapsed)
朱莉娅版本
using Tullio
function comp_tullio(a, c)
dist = zeros(Float32, size(a, 2))
@tullio dist[i] = (c[j] - a[j,i])^2
dist
end
@time comp_tullio(a, c)
@benchmark comp_tullio(a, c) # 75ms on my computer
慕沐林林
相关分类