如果已经提出这个(或类似的东西),请原谅我。
我有一个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);
答案 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
的值。但如果性能确实是一个问题,那么你应该对这两个选项进行基准测试。