我有两个 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]
这种方法效果很好,但速度很慢(705ms 和%timeit
)。我也觉得这看起来真的很笨拙。有没有更优雅高效的方式(我确定有)。
更新为最佳答案
第二种方法是
idx = [x[i+1] == x[i] for i in xrange(len(x)-1)]
第三种(也是最快的)方法是
idx = x[:-1] == x[1:]
结果是(使用 ipython 的%timeit
):
第一种方法:751ms
第二种方法:618ms
第三种方法:3.63ms
这两种方法都归功于 mtitan8。