为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨__羊羊 2023-12-08 17:08:26
我想迭代图像并将限制性 (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
查看完整描述

2 回答

?
Cats萌萌

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]])


查看完整回答
反对 回复 2023-12-08
?
牧羊人nacy

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)


查看完整回答
反对 回复 2023-12-08
  • 2 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信