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)
添加回答
舉報