我想要矢量化以下函数。参数是numpy数组。
def euclidean_distance(dl, dr):
return math.sqrt(((dl - dr) ** 2).sum())
我做以下
v_u = numpy.vectorize(euclidean_distance)
我正在进行以下调用
v_u(numpy.array([[10, 20, 30], [4, 5, 6]]), numpy.array([1, 2, 3]))
我想要的是我找回一个包含[1, 2, 3]
与[10, 20, 30], [4, 5, 6]
的欧氏距离的数组。
我想我错过了一些明显的东西。
修改
以下是我得到的错误
AttributeError: 'int' object has no attribute 'sum'
很明显,dl
和dr
作为单个元素传递但不作为数组传递...
所以我想知道是否有人可以纠正它以便它在阵列上运行。
非常感谢
答案 0 :(得分:5)
为什么你需要vectorize
?
您可以使用形状广播并执行以下操作:
dist = numpy.sqrt(numpy.sum((d1-dr)**2, axis = 1))