【发布时间】:2013-07-26 19:30:04
【问题描述】:
我这里有一个特定的性能问题。我正在处理气象预报时间序列,我将其编译成一个 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]
我确定一定有更优雅的方式来做到这一点?任何提示将不胜感激。
【问题讨论】:
-
你介意解释一下吗,我在“但是当然......”这句话中迷失了方向。数组中的不同来源如何表示? dim0 表示行和 dim1=dimension1=columns 吗?
-
@elyase:这些数字正在向下和向左移动,因为例如,如果预测是从现在开始的一小时后(12:00)的 12.2,那么一小时后的预测将从那时起(13:00)是 12.2 零时。