我发现了一个小的代码片段,它曾经使用了一个双重循环,我成功地用向量化将其变成了单个循环。这样做导致时间显著提高,因此我想知道是否可能通过向量化来消除第二个循环,以及是否会改善性能。
所以可以通过创建以下矩阵来将ling取出循环。
import numpy as np
from timeit import default_timer as timer
nlin, npix = 478, 480
bb = np.random.rand(nlin,npix)
slope = -8
fac = 4
offset= 0
barray = np.zeros([2,2259]);
timex = timer()
for y in range(nlin):
for x in range(npix):
ling=(np.ceil((x-y/slope)*fac)+1-offset).astype(np.int);
barray[0,ling] +=1;
barray[1,ling] +=bb[y,x];
newVar = np.copy(barray)
print(timer() - timex)
所以可以通过创建以下矩阵来将ling取出循环。
lingMat = (np.ceil((np.vstack(npixrange)-nlinrange/slope)*fac)+1-offset).astype(np.int);
这可以满足 lingMat[x,y] = "在 x 和 y 的循环中的ling"。这为向量化迈出了第一步。