2 回答
TA贡献1805条经验 获得超9个赞
你的循环没有什么:
In [26]: width, height = 4,4
...: dist_arr = np.empty((width, height))
...: for x in range(0, width):
...: for y in range(0, height):
...: dist = math.sqrt((300 - x)**2 + (600 - y)**2)
...: dist_arr[x, y] = dist
...:
In [27]: dist_arr
Out[27]:
array([[670.82039325, 669.92611533, 669.03213675, 668.1384587 ],
[670.37377634, 669.47890183, 668.58432527, 667.69004785],
[669.92835438, 669.03288409, 668.13771036, 667.24283436],
[669.48412976, 668.58806451, 667.6922944 , 666.79682063]])
有一些方法可以更快地做到这一点,但它们确实有效。
与整个数组numpy计算相同的值:
In [28]: np.sqrt((300-np.arange(4)[:,None])**2 + (600 - np.arange(4))**2)
Out[28]:
array([[670.82039325, 669.92611533, 669.03213675, 668.1384587 ],
[670.37377634, 669.47890183, 668.58432527, 667.69004785],
[669.92835438, 669.03288409, 668.13771036, 667.24283436],
[669.48412976, 668.58806451, 667.6922944 , 666.79682063]])
TA贡献1862条经验 获得超7个赞
尝试np.indices + np.hypot
x, y = np.indices((width, height)) np_dist = np.hypot(x - 300, y - 600) # or np.hypot(300 - x, 600 - y)
添加回答
举报