Python 如何在不使用for/while循环的情况下迭代数据数组?

Python 如何在不使用for/while循环的情况下迭代数据数组?,python,numpy,numpy-ndarray,Python,Numpy,Numpy Ndarray,对于两个给定的一维数组或列表,我可以通过函数计算平方欧氏距离 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) retur

对于两个给定的一维数组或列表,我可以通过函数计算平方欧氏距离

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。我该怎么做呢?

对于numpy,更喜欢np.sum和np.min,而不是Python构建的sum和min

我们可以为2D numpy向量调整npdistance:

def npdistance(x1, x2):
    return np.sum((np.array(x1)-np.array(x2))**2, axis=1)
考虑矩阵x2:

矩阵x2有两个轴:

第零位是向量数:x2[0]是np.数组[1,1,1],x2[1]是np.数组[2,3,4], 第一个轴用于向量维度:x2[1][1]是第一个向量的第二个元素。 我们沿轴执行求和=1以获得每个向量的距离

如果没有np.sum axis=1,它将返回标量, 使用buildin sum给出所有向量的和ala轴=0。 在这种情况下,NPC工作正常

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。

第一个轴是矢量维度,x2[1][1]是3之间的关系是什么?这意味着第一个轴用于访问矢量的标量分量。当x2[i]=[a_0,a_1,a_2]时,则x2[i][0]=a_0,…,x2[i][2]=a_2。
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]]))