考虑下面的数组和测试结果
当数组元素是字符串时为什么运行tolist()
更快,而当数组元素是浮点数时更快?
bunch_of_strings = pd.DataFrame(
np.random.choice(list(ascii_letters), (10000, 4))).sum(1).values
bunch_of_floats = np.random.rand(10000)
答案 0 :(得分:6)
你的bunch_of_strings
数组有对象dtype,这意味着它没有NumPy带来的任何好处。它基本上只是一个更糟糕的列表,其中包含一堆特定于NumPy的开销和固定大小。
当您致电tolist
时,np.unique
必须将列表转换回数组。如果是这样,它会生成一个dtype dtype('S4')
数组,一个字符串dtype。非对象dtype的好处可以在np.unique
调用中节省大量时间,而不是在额外转换中丢失。
相比之下,bunch_of_floats
有float64 dtype,而array-> list->数组转换并没有改变它。这只是浪费时间。