Python在数组中创建唯一值的掩码

2024-05-16 23:57:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个numpy数组,x和{}(长度大约为2M)。x是有序的,但有些值是相同的。在

任务是在x中的值相同时删除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)。而且我觉得这看起来很笨拙。有没有更优雅高效的方法(我肯定有)。在

更新最佳答案

第二种方法是

^{pr2}$

第三种方法是

idx = x[:-1] == x[1:]

结果是(使用ipython的%timeit):

第一次方法:751ms

方法:618ms

第三次方法:3.63ms

这两种方法都归功于mtitan8。在


Tags: 方法numpyfordefnp数组emptybool