最近,我观察到熊猫在繁殖时速度更快。我在下面的示例中向您展示。这样简单的操作怎么可能?怎么可能呢? 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快五到六倍,以评估这种简单的乘法。怎么会这样?
答案 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(广播)的乘法数据帧。