我不太确定如何描述我的问题,但我会尝试。
我想知道 numpy 是否具有执行此操作的功能:
假设我有一个名为网格的二维数组:
grid = [ [0,0],
[0,0] ]
我还有一个名为 aList 的第二个二维数组:
aList = [ [1,2],
[3,4] ]
我想根据第一个数组的索引将数学应用于第一个数组。
所以在每次迭代中完成的数学运算看起来像这样:
grid[i][j] = [(i - aList[k][0]) + (j - aList[k][1])]
目前在 python 中使用 for 循环执行此操作非常昂贵,因此我需要一个替代方案。
编辑:更多说明,如果我不使用 numpy,我会写这样的东西:
for i in range(2):
for j in range(2):
num = 0
for k in range(2):
num += (i-aList[k][0]) + (j-aList[k][1])
grid[i][j] = num
然而,对于我拥有的数据量,这是在 python 中减慢速度的方法。
请您参考如下方法:
您的代码可以按如下方式重现并显着加速:
i_s = np.arange(2)
j_s = np.arange(2)
fast_grid = (i_s + j_s[:, None])*len(aList) - aList.sum()
