为什么在简单的数学运算中,大熊猫比麻木要快?

时间:2020-06-17 08:25:00

标签: python pandas performance numpy

最近,我观察到熊猫在繁殖时速度更快。我在下面的示例中向您展示。这样简单的操作怎么可能?怎么可能呢? 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)

观察

熊猫比numpy快五到六倍,以评估这种简单的乘法。怎么会这样?

1 个答案:

答案 0 :(得分:2)

熊猫在幕后使用numexpr

如果已安装,Pandas将在引擎盖下使用numexpr。就我而言,这是真的。如果我明确使用numexpr,则会得到以下信息。

测量

使用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)

观察

现在,用于评估数组自身乘积的壁挂时间为减去熊猫所需的壁挂时间。

结论

在某些情况下,大熊猫要比单独的numpy快。另一方面,通过将numexpr与numpy一起使用,可以获得相同的加速。但是您需要“自己做”。此外,这不是熊猫的正常用例。通常,一个数据帧的至少一个轴上具有索引或多索引(层次索引)。例如,需要研究不等于MultiIndex(广播)的乘法数据帧。