如果给我们"starting_point"
和"list_of_points"
,我们如何创建一个新的numpy数组"距离"包含" starting_point"之间的距离;并且" list_of_points"中的每个点?
我试图通过使用以下代码循环遍历"list_of_points"
来实现此目的,但它不起作用:
distances = sqrt( (list_of_points[num][0] - starting_point[0])^2 + list_of_points[num][1] - starting_point[1])^2 ) for num in range (0,4)
starting_point = np.array([1.0, 2.0])
list_of_points = np.array([-5.0, -3.0], [-4.0, 2.0], [7.0, 8.0], [6.0, -9.0])
distances = np.array([ d1 ], [ d2 ], [ d3 ], [ d4 ])
答案 0 :(得分:0)
你正在使用Numpy进入正确的轨道。我个人发现Numpy在我第一次使用它时非常不直观,但是通过练习它会变得更容易。
基本思想是你想避免循环并使用矢量化操作。这样可以在大型数据结构上实现更多更快的操作。
部分向量化是broadcasting - Numpy可以在不同形状的对象上应用操作。因此,在这种情况下,您可以在不循环的情况下减去:
import numpy as np
starting_point = np.array([1.0, 2.0])
list_of_points = np.array([[4, 6], [5, 5], [3, 2]])
# subtract starting_point from each point in list_of_points
dif = list_of_points - starting_point
如果你在文档中挖掘,你会发现各种矢量化操作,包括np.linalg.norm()
(docs)计算包括距离在内的不同类型的规范。使用它的技巧是找出使用哪个轴。我更改了值以便于确认正确的答案:
import numpy as np
starting_point = np.array([1.0, 2.0])
list_of_points = np.array([[4, 6], [5, 5], [3, 2]])
np.linalg.norm(starting_point - list_of_points, axis=1)
# array([ 5., 5., 2.])
如果您愿意,也可以通过平方,求和和取平方根来实现:
np.sqrt(
np.sum(
np.square(list_of_points - starting_point),
axis = 1)
)
# array([ 5., 5., 2.])