如何将两个for循环内计算的结果存储在np数组中?

我想迭代图像并将限制性 (x,y) 像素与点 (300,600) 之间的计算距离保存在 numpy 数组 np_dist 中。目前,所有 dist 值的结果都保存在数组的一个元素中。如何填充每个元素存储一个值的数组?


dist_arr = np.empty((width, height))

for x in range(0, width): 

    for y in range(0, height): 

        pixel = (x, y) 

        dist = math.sqrt((300 - pixel[0])**2 + (600 - pixel[1])**2) 

        dist_arr[pixel[0], pixel[1]] = dist


杨__羊羊
浏览 103回答 2
2回答

Cats萌萌

你的循环没有什么: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_arrOut[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]])

牧羊人nacy

尝试np.indices + np.hypotx, y = np.indices((width, height)) np_dist = np.hypot(x - 300, y - 600) # or np.hypot(300 - x, 600 - y)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python