我在这里有一个特定的性能问题。我正在处理气象预报时间序列,我将其编译成一个 numpy 2d 数组,这样
- dim0 = 预测系列开始的时间
- dim1 = 预测范围,例如。0 到 120 小时
现在,我希望 dim0 具有每小时间隔,但有些来源仅每 N 小时产生一次预测。例如,假设 N=3,dim1 中的时间步长为 M=1 小时。然后我得到类似的东西
12:00 11.2 12.2 14.0 15.0 11.3 12.0
13:00 nan nan nan nan nan nan
14:00 nan nan nan nan nan nan
15:00 14.7 11.5 12.2 13.0 14.3 15.1
但当然也有 13:00 和 14:00 的信息,因为它可以从 12:00 的预测运行中填写。所以我想结束这样的事情:
12:00 11.2 12.2 14.0 15.0 11.3 12.0
13:00 12.2 14.0 15.0 11.3 12.0 nan
14:00 14.0 15.0 11.3 12.0 nan nan
15:00 14.7 11.5 12.2 13.0 14.3 15.1
假设 dim0 是 1e4 的顺序,dim1 是 1e2 的顺序,那么到达那里的最快方法是什么?现在我正在逐行进行,但这很慢:
nRows, nCols = dat.shape
if N >= M:
assert(N % M == 0) # must have whole numbers
for i in range(1, nRows):
k = np.array(np.where(np.isnan(self.dat[i, :])))
k = k[k < nCols - N] # do not overstep
self.dat[i, k] = self.dat[i-1, k+N]
我确定必须有一种更优雅的方式来做到这一点?任何提示将不胜感激。