"在numpy中"

NPE*_*NPE 7 python loops numpy time-series

我正在寻找一种方法来实现"as as"运算符numpy.具体来说,如果:

  1. t1n一个严格递增的时间戳的矢量;
  2. d1是一个n x p观察矩阵,i第 - 行对应t1[i];
  3. t2m时间戳的矢量中,也是严格递增的顺序;

我需要创建一个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)