在Python中,哪个更快?
numpy.max(), numpy.min()
或者max(), min()
我的列表/数组长度在2到600之间变化。为了节省运行时间,我应该使用哪个?
根据我的计时,如果你已经有了numpy数组 a
,那么应该使用 a.max
(源代码说明如果a.max
可用,则与np.max
相同)。但如果你有内置列表,则大多数时间需要将其转换为np.ndarray => 这就是为什么在你的计时中max
更好。
实质上:如果是np.ndarray
,则使用a.max
;如果是list
并且不需要所有np.ndarray
的机制,则使用标准的max
。
我也对此很感兴趣,用perfplot(我的一个小项目)测试了这三种变体。结果:使用a.max()
是正确的选择。
重现图表所需的代码:
import numpy as np
import perfplot
b = perfplot.bench(
setup=np.random.rand,
kernels=[max, np.max, lambda a: a.max()],
labels=["max(a)", "np.max(a)", "a.max()"],
n_range=[2 ** k for k in range(25)],
xlabel="len(a)",
)
b.show()
最好使用像Python timeit模块这样的工具来测试。这样您就可以在自己的环境中测试自己的数据,而不是依赖于各种测试数据和环境的第三方,这些数据和环境并不一定代表您的环境。
numpy.min
和 numpy.max
在语义上(和调用方式)与内置函数有略微不同,因此选择不应该只考虑速度。如果需要处理多维数据,则使用numpy版本。如果只是使用Python列表或其他不涉及维度的数据类型,则使用内置函数。
max
函数。如果数据是存储在一个NumPy的数组中,我会使用numpy.max
函数。将列表转化为NumPy数组是一项相当昂贵的操作。 - John La Rooy