我有两个numpy数组,x
和y
(长度约为2M)。 x
是有序的,但有些值是相同的。
当x
中的值相同时,任务是删除y
和x
的值。我的想法是创造一个面具。以下是我到目前为止所做的事情:
def createMask(x):
idx = np.empty(x.shape, dtype=bool)
for i in xrange(len(x)-1):
if x[i+1] == x[i]:
idx[i] = False
return idx
idx = createMask(x)
x = x[idx]
y = y[idx]
此方法工作正常,但速度很慢(%timeit
为705毫秒)。另外我认为这看起来真的很结实。是否有更优雅和有效的方式(我确信有)。
更新了最佳答案
第二方法是
idx = [x[i+1] == x[i] for i in xrange(len(x)-1)]
第三(和最快)方法
idx = x[:-1] == x[1:]
结果是(使用ipython的%timeit
):
第一个方法:751毫秒
第二方法:618毫秒
第三方法:3.63毫秒
两种方法都归功于mtitan8。
答案 0 :(得分:3)
我认为最快的方法是使用numpy的x
数组运算符比较==
:
idx = x[:-1] == x[1:]
在我的机器上,使用x
在[0,100]中有一百万个随机整数,
In[15]: timeit idx = x[:-1] == x[1:]
1000 loops, best of 3: 1 ms per loop