2016-12-27 42 views
0

考慮下面的數組和測試結果。
爲什麼在數組元素是字符串時更快地運行tolist()而數組元素是浮動時不會更快?當數組是字符串類型時,爲什麼np.unique(array.tolist())比np.unique(array)快,而浮點數則相反?

bunch_of_strings = pd.DataFrame(
    np.random.choice(list(ascii_letters), (10000, 4))).sum(1).values 
bunch_of_floats = np.random.rand(10000) 

enter image description here

+0

與「數組如果不是1D時數組將會變平」以及數組中的元素是字符串的事實,是否也可以使用可下載的?通過轉換爲「列表」,不存在歧義。無論如何,看起來像一個錯誤。 –

回答

6

bunch_of_strings數組對象D類,這意味着它沒有得到的與NumPy的好處。這基本上只是一個NumPy特定開銷和固定大小的更糟糕的列表。

當您撥打tolist時,np.unique必須將列表轉換回數組。當它這樣做時,它會生成一個dtype dtype('S4')的數組,它是一個字符串dtype。非對象dtype的好處可以在np.unique調用中節省大量時間,超過額外轉換中的損失。

與此相反,bunch_of_floats具有float64 dtype,並且array-> list-> array轉換不會更改該值。它只是浪費時間。

相關問題