5

次のコードを高速化しようとしています。

NNlist=[np.unique(i) for i in NNlist] 

ここで、NNlist は重複したエントリを持つ np.arrays のリストです。

ありがとう :)

4

5 に答える 5

5

numpy.uniqueすでにかなり最適化されているため、基になるデータについて何か他のことを知らない限り、既に持っているものよりも大幅に高速化することはできません。たとえば、データがすべて使用できる小さな整数であるnumpy.bincount場合、または各配列の一意の値がほとんど同じである場合、配列のリスト全体に対して実行できる最適化が行われる可能性があります。

于 2012-12-03T17:59:05.133 に答える
0

いくつかのベンチマークを次に示します。

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も違いはありません。

于 2012-12-03T20:32:44.643 に答える