2013-08-05 20 views
2

我有一个相当大的数据集raw,我最初选择这样的行:如何加速Numpy中的行选择?

raw = np.array(Some Matrix) 
selected = [r for r in raw if r[1] == '20130525' and r[2] < 120000] 

但这实在是太慢了,谁知道如何加快速度使用numpy的的内置的功能呢?

回答

1

这将是标准numpythonic方法:

selected = raw[(raw[:, 1] == '20130525') & (raw[:, 2] == 120000)] 

但进程加快的可能会是微薄的,如果你有object类型的数组,作为混合数据类型的建议。你究竟在干什么?你可以使用recarray吗?

+0

它是'&'不是'&&'? – MrROY

+0

我不知道为什么,但是这比我的'[r for r in raw if [1] =='xxx']''更慢' – MrROY

+0

检查'raw.dtype'是什么。如果它是'object'类型的,那么你不应该以它应该被使用的方式来破坏你自己:用一个单一的通用数据类型的数组。另一种方法是至少让所有的列共享一个数据类型(即使用一个记录数组)。如果您提供有关阵列中的内容的更多信息,以及如何构建阵列,则可以重新采用您的方法,并为您提供所需的速度。 – Jaime