次のコードを高速化しようとしています。
NNlist=[np.unique(i) for i in NNlist]
ここで、NNlist は重複したエントリを持つ np.arrays のリストです。
ありがとう :)
次のコードを高速化しようとしています。
NNlist=[np.unique(i) for i in NNlist]
ここで、NNlist は重複したエントリを持つ np.arrays のリストです。
ありがとう :)
numpy.unique
すでにかなり最適化されているため、基になるデータについて何か他のことを知らない限り、既に持っているものよりも大幅に高速化することはできません。たとえば、データがすべて使用できる小さな整数であるnumpy.bincount
場合、または各配列の一意の値がほとんど同じである場合、配列のリスト全体に対して実行できる最適化が行われる可能性があります。
いくつかのベンチマークを次に示します。
In [72]: ar_list = [np.random.randint(0, 100, 1000) for _ in range(100)]
In [73]: %timeit map(np.unique, ar_list)
100 loops, best of 3: 4.9 ms per loop
In [74]: %timeit [np.unique(ar) for ar in ar_list]
100 loops, best of 3: 4.9 ms per loop
In [75]: %timeit [pd.unique(ar) for ar in ar_list] # using pandas
100 loops, best of 3: 2.25 ms per loop
pandas.unique
よりも速いようですnumpy.unique
。ただし、docstring には、値が「必ずしもソートされているわけではない」と記載されており、(部分的に) 高速であることが説明されています。この例では、リスト内包表記 or を使用してmap
も違いはありません。