最近,我观察到 pandas 的乘法速度更快。我在下面的例子中向您展示了这一点。如此简单的操作怎么可能做到这一点?这怎么可能呢? pandas 数据帧中的底层数据容器是 numpy 数组。
测量
我使用形状为(10k,10k)的数组/数据框。
import numpy as np
import pandas as pd
a = np.random.randn(10000, 10000)
d = pd.DataFrame(a.copy())
a.shape
(10000, 10000)
d.shape
(10000, 10000)
%%timeit
d * d
53.2 ms ± 333 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
a * a
318 ms ± 12.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
观察结果
pandas 计算这个简单乘法的速度大约是 numpy 的五到六倍。怎么会这样?
熊猫用途numexpr
幕后
熊猫用途numexpr
如果已安装,则位于引擎盖下。我的情况就是如此。如果我明确使用 numexpr 我会得到以下结果。
测量
With numexpr.evaluate
一个“有效”的数字表达式numpy.ndarrays
可以评价。
import numexpr
%%timeit
numexpr.evaluate('a * a')
52.7 ms ± 398 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
观察结果
现在,评估数组与其自身的乘积的时间为正负,与 pandas 所需的时间相同。
结论
在某些情况下,pandas 可能比单独的 numpy 更快。另一方面,通过使用numexpr
与 numpy 一起可以获得相同的加速。但你需要“自己”做。此外,这不是 pandas 的正常用例。通常,数据框的至少一个轴上附有索引或多索引(层次索引)。例如,需要研究将数据帧与不相等的 MultiIndex(广播)相乘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)