如何使用python中的循环提高处理numpy数组的计算效率?

问题描述 投票:0回答:2

我正在尝试在python中使用numpy进行一些图像转换任务。这个想法是,假设我已将图像文件加载到numpy数组img中,然后创建了一个新数组new_img,并且还定义了像素坐标之间的映射:新图像中的[x,y]对应于[ C0]。然后,我使用[old_x,old_y]计算转换。实际计算此转换的循环看起来像这样[[(不是真正可运行的,因为我省略了有关转换规则,图像的宽度和长度,边界检查等的许多细节,但您知道了)]]。 new_img[x,y] = img[old_x,old_y]

我遇到的问题是,双循环非常耗时。对于1000x1000的图像,需要花费一到两分钟的时间。另一方面,由于转换规则def get_old_coord(y,x):
  # this is the function to compute the corresponding pixel coordinates
  # some computation here yields old_x and old_y
  # ...
  return old_x,old_y

for x in range(height_of_new_img):
  for y in range(width_of_new_img):
    new_img[y,x] = img[get_old_coord(x,y)]

# new_img is then as desired.
可能很多,所以我认为我不能通过使用一些内置函数进行数组运算来改善这一点。如何使该过程更有效率?


更新:

对于那些想要完整示例的人,这是一个get_old_coord
基本上,这实现了极坐标变换。对不起,还没有时间向我的代码中添加注释。但是,在您的任何图像上尝试都应该很有趣。另外,在此示例中,我实际上使用了割炬张量,但它们与numpy数组没有太大区别。

我正在尝试在python中使用numpy进行一些图像转换任务。这个想法是,假设我已经将一个图像文件加载到一个numpy数组img中,然后创建了一个新数组new_img,还有...

python arrays numpy processing-efficiency
2个回答
0
投票
您基本上需要向量化,但是可以访问对其执行元素明智操作的数组的索引。

-1
投票
如果只想将一个数组中的值有效地移到另一个数组中,则希望将转换实现为矩阵乘法。这样,您可以使用
© www.soinside.com 2019 - 2024. All rights reserved.