我有一个具体的性能问题。我正在处理气象预报时间序列,我把它编译成一个numpy 2d数组,这样
现在,我希望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预测运行中填写。所以我想以这样的方式结束:
^{pr2}$假设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]
我肯定有更优雅的方法来做这个?如有任何提示,将不胜感激。在
这似乎起到了作用:
现在有一些测试数据:
^{pr2}$以及使用(1e4,1e2)阵列进行测试:
使用
a=yourdata[:,1:]
切片数据。在按原样使用您的数据,或者可以稍微更改一下以直接获取数据,但这似乎是一种明确的方式来显示这一点:
^{pr2}$使用蒂亚戈的测试:
如果你真的很聪明的话,你应该可以用一个
np.where
逃脱惩罚。在看,布尔索引的力量!!!在
我认为这个名字是不言而喻的。正确的切片是一件痛苦的事,但它似乎奏效了:
^{pr2}$时间安排:
相关问题 更多 >
编程相关推荐