2012-12-03 63 views
1

我期待加快下面的一段代碼:Python的提速np.unique

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

其中NNlist是重複的條目np.arrays的列表。

謝謝:)

+0

原始'NNlist'實際上是一個多維的numpy數組嗎? (爲什麼你會希望結果是一個Python'list'?) –

+0

其實NNlist是np.arrays的列表,因爲它是使用append創建的(大小並不知道先驗)。然而,在這一點上,我發現創建一個列表或一個np.array並不重要 – bios

+1

'map(np.unique,NNlist)'可能是一個很好的開始。 – Will

回答

2

numpy.unique已經相當優化,你可能不會得到得到太多的加速比你已經擁有的,除非你知道別的有關基礎數據。例如,如果數據全是小整數,您可能可以使用numpy.bincout,或者如果每個數組中的唯一值大多相同,則可能會對整個數組列表進行一些優化。

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更快。然而,文檔字符串提到這些值「不一定是分類的」,這部分地解釋了它的速度更快。 使用列表理解或map在本例中沒有區別。