考虑下面的数组和测试结果.
为什么tolist()当数组元素是字符串时运行速度更快而数组元素浮动时更快?
bunch_of_strings = pd.DataFrame(
np.random.choice(list(ascii_letters), (10000, 4))).sum(1).values
bunch_of_floats = np.random.rand(10000)
Run Code Online (Sandbox Code Playgroud)
你的bunch_of_strings数组有对象dtype,这意味着它没有NumPy的好处.它基本上只是一个更糟糕的列表,具有一堆特定于NumPy的开销和固定大小.
当你调用时tolist,np.unique必须将列表转换回数组.当它这样做时,它会生成一个dtype数组dtype('S4'),一个字符串dtype.非对象dtype的好处在np.unique通话中节省了大量时间,而不是额外转换中丢失的时间.
相比之下,bunch_of_floats有float64 dtype,而array-> list-> array转换不会改变它.这只是浪费时间.