【发布时间】:2013-10-23 13:33:57
【问题描述】:
我有两个 numpy 数组,x 和 y(长度约为 2M)。 x 是有序的,但有些值是相同的。
当x 中的值相同时,任务是删除x 和y 的值。我的想法是创建一个面具。这是我到目前为止所做的:
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):
第一种方法:751ms
第二种方法:618ms
第三种方法:3.63ms
这两种方法都归功于 mtitan8。
【问题讨论】:
标签: python performance optimization numpy mask