【发布时间】:2019-03-02 07:59:58
【问题描述】:
我正在尝试将一个小的 2D numpy 数组(“source”)的值添加到一个更大的 2D numpy 数组(“frame”)中,从帧数组中的特定位置开始(“pos_x”,“铭文”)。现在,我有两个 for 循环将源值添加到每个位置的帧值:
for i in range(x):
for j in range(y):
frame[pos_x+i][pos_y+j] += source[i][j]
(“x”和“y”是源数组的形状)
但是,阵列非常大(框架阵列形状:5000x8000,源阵列形状:1000x5000)。所以这个过程需要很长时间(大约 15 秒)。
有什么方法可以加快这个过程,无论是通过列表理解、映射还是其他方式?
我已经用多个语句和赋值尝试了这样的列表理解:
frame = [[frame[pos_x+i][pos_y+j] + source[i][j] for j in range(y)] for i in range(x)]
(改编自线程:How can I do assignments in a list comprehension? 和 Multiple statements in list compherensions in Python?)
但它需要的时间与原来的 for 循环一样长。
另一个想法是只允许循环使用if source[i][j] != 0 的非零值。但是当我尝试这样做时,它花费了三倍多的时间(潜在的子问题:知道为什么吗?)。
【问题讨论】:
-
我认为您发布的代码中有错字,在第二个代码块中,第二个范围应该是
range(x)而不是range(xs),对吧? -
真的,谢谢(那些是我在较大程序中的旧变量名)。
标签: python python-3.x multidimensional-array mapping list-comprehension