【发布时间】:2014-07-29 08:43:03
【问题描述】:
我有以下函数来获取两个向量a 和b 之间的欧几里得距离。
def distance_func(a,b):
distance = np.linalg.norm(b-a)
return distance
在这里,我希望 a 成为向量数组的一个元素。所以我使用 numpy vectorize 来遍历数组。 (为了获得比使用 for 循环迭代更好的速度)
vfunc = np.vectorize(distance_func)
我用它来得到一个欧几里得距离数组
a = np.array([[1,2],[2,3],[3,4],[4,5],[5,6]])
b = np.array([1,2])
vfunc(a,b)
但是这个函数返回:
数组([[ 0., 0.], [1., 1.], [2., 2.], [3., 3.], [4., 4.]])
这是对第二个向量单独执行np.linalg.norm(a-b) 操作的结果。
如何使用 numpy vectorize 以这种方式获取欧几里得距离数组?
【问题讨论】:
-
来自
vectorize文档:The vectorize function is provided primarily for convenience, not for performance. The implementation is essentially a for loop.
标签: python arrays python-2.7 numpy vectorization