我在这里有一个特定的性能问题。我正在与气象预报时间序列,这是我编译成numpy的2D阵列,使得优雅的numpy阵列移位和NaN填充?
- 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 =列? – elyase
@elyase:数字正在向左下移,因为,例如,如果从现在开始(在12:00)一小时后的预测值为12.2,那么在一小时之内,预测值将是12.2零小时,在13:00)。 – unutbu