使用numpy数组操作将行N与行N + 1进行比较

时间:2017-09-28 01:21:18

标签: python arrays numpy

如果已经提出这个(或类似的东西),请原谅我。

我有一个numpy结构化的numpy数组> 1E7条目。现在,数组中的一列是特定事件的时间戳。我想做的是根据时间戳过滤数组。如果N + 1行的时间戳大于T的前一个条目,我想保留第N行。是否有一种有效的方法可以在numpy中执行此操作?我已经按照以下方式处理它,但它太慢而无法使用(y是填充了我们所有数据的结构化数组.x是过滤后的数组)

  String oranges,afterToday;

  int x, y , d; //here code goes to get user input 

  if ((y > 2777) && (m > 2) && (d > 22)){
      oranges = "yes please";
  }else{
       afterToday = "no, thanks";
  }
  System.out.println("Y = "+y "M = "+m + "D ="+d + "Oranges: "+oranges);

1 个答案:

答案 0 :(得分:1)

这是在numpy中使用高级索引的一个很好的例子:

this_row = y['timestamp'][:-1]
next_row = y['timestamp'][1:]
selection = next_row - this_row > T
result = y[:-1][selection]

最后一行中的y[:-1]是必要的,因为selection只有len(y) - 1,最后一个元素应该根据您的代码丢弃。或者,您也可以将另一个False连接到选择,但这可能会更慢,因为它需要复制selection的值。但如果性能确实是一个问题,那么你应该对这两个选项进行基准测试。