我期待加快下面的一段代碼:Python的提速np.unique
NNlist=[np.unique(i) for i in NNlist]
其中NNlist是重複的條目np.arrays的列表。
謝謝:)
我期待加快下面的一段代碼:Python的提速np.unique
NNlist=[np.unique(i) for i in NNlist]
其中NNlist是重複的條目np.arrays的列表。
謝謝:)
numpy.unique
已經相當優化,你可能不會得到得到太多的加速比你已經擁有的,除非你知道別的有關基礎數據。例如,如果數據全是小整數,您可能可以使用numpy.bincout
,或者如果每個數組中的唯一值大多相同,則可能會對整個數組列表進行一些優化。
這裏有一些基準:
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
在本例中沒有區別。
原始'NNlist'實際上是一個多維的numpy數組嗎? (爲什麼你會希望結果是一個Python'list'?) –
其實NNlist是np.arrays的列表,因爲它是使用append創建的(大小並不知道先驗)。然而,在這一點上,我發現創建一個列表或一個np.array並不重要 – bios
'map(np.unique,NNlist)'可能是一個很好的開始。 – Will