私は 2 つの 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]
この方法は問題なく動作しますが、遅いです ( で 705 ミリ秒%timeit
)。また、これは本当に不器用に見えると思います。もっとエレガントで効率的な方法はありますか(確かにあると思います)。
ベストアンサーで更新
2番目の方法は
idx = [x[i+1] == x[i] for i in xrange(len(x)-1)]
そして3番目の(そして最速の)方法は
idx = x[:-1] == x[1:]
結果は次のとおりです(ipythonのを使用%timeit
):
最初の方法: 751ms
2 番目の方法: 618ms
3 番目の方法: 3.63ms
両方の方法について、mtitan8 の功績によるものです。