对于两个给定的一维数组或列表,我可以通过函数计算欧几里德距离的平方
import numpy as np
def npdistance(x1, x2):
return sum((np.array(x1)-np.array(x2))**2)
现在对于给定的向量v和2d数组X,我想找到X中包含的任何向量到向量u的最短平方欧氏距离,而无需使用for / while循环遍历X的元素。我的尝试是
def npnearest(u, X):
L=npdistance(u,X)
return min(L)
这不能给我我想要的东西。例如
npnearest(np.array([1,1,1]), np.array([[1,1,1],[2,3,4]]))
请给我16而不是0。我该怎么办?
答案 0 :(得分:1)
如果是numpy,则首选np.sum
和np.min
,而不是Python内置插件sum
和min
。
我们可以将npdistance
应用于2D numpy向量:
def npdistance(x1, x2):
return np.sum((np.array(x1)-np.array(x2))**2, axis=1)
考虑矩阵x2
:
x2 = np.array([[1,1,1],[2,3,4]])
矩阵x2
有两个轴:
x2[0]
是np.array([1, 1, 1])
,而x2[1]
是np.array([2, 3, 4])
,x2[1][1]
是3
(第一向量的第二个元素)。我们沿axis=1
执行求和,以获得每个向量的距离。
np.sum
axis=1
,它将返回标量,sum
给出所有向量的总和(ala axis=0
)。 npnearest
在这种情况下可以正常工作。
def npnearest(u, X):
L=npdistance(u,X)
return min(L)
npnearest(np.array([1,1,1]), np.array([[1,1,1],[2,3,4]]))
给出0。