[英]How do I iterate over an ndarray without using for/while loops?
对于两个给定的一维 arrays 或列表,我可以通过 function 计算平方欧几里得距离
import numpy as np
def npdistance(x1, x2):
return sum((np.array(x1)-np.array(x2))**2)
现在对于给定的向量 v 和 2d 数组 XI 想要找到包含在 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
。
我们可以为二维 numpy 向量调整npdistance
:
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.