NPE*_*NPE 7 python loops numpy time-series
我正在寻找一种方法来实现"as as"运算符numpy.具体来说,如果:
t1是n一个严格递增的时间戳的矢量;d1是一个n x p观察矩阵,i第 - 行对应t1[i];t2在m时间戳的矢量中,也是严格递增的顺序;我需要创建一个m x p矩阵d2,其中d2[i]仅仅是d1[j]对的最大价值j,使得t1[j] <= t2[i].
换句话说,我需要的行d1 为的时间戳t2.
用纯Python编写它很容易,但我想知道是否有办法避免解释循环(n,m并且p非常大).
时间戳是datetime.datetime对象.观察结果是浮点值.
编辑:对于t1[j] <= t2[i]无法满足的条目(即t2在所有时间戳之前的时间戳中t1),我理想地想获得NaNs 行.
Sve*_*ach 11
您最好的选择是numpy.searchsorted():
d1[numpy.searchsorted(t1, t2, side="right") - 1]
Run Code Online (Sandbox Code Playgroud)
这将搜索t2必须插入值的索引t1以维持顺序.在side="right"与- 1位,以保证准确地指定的行为.
编辑:要获取t1[j] <= t2[i]无法满足条件的NaN行,您可以使用
nan_row = numpy.repeat(numpy.nan, d1.shape[1])
d1_nan = numpy.vstack((nan_row, d1))
d2 = d1_nan[numpy.searchsorted(t1, t2, side="right")]
Run Code Online (Sandbox Code Playgroud)