numpy.max和max哪个更快?

46

在Python中,哪个更快?

numpy.max(), numpy.min()
或者
max(), min()

我的列表/数组长度在2到600之间变化。为了节省运行时间,我应该使用哪个?


4
你应该一定要进行测试以了解你特定情况下的情况,但我的第一反应是这将取决于你的可迭代对象是普通的Python可迭代对象还是NumPy可迭代对象。 - jedwards
7
如果数据是存储在一个列表中,我会使用基础的max函数。如果数据是存储在一个NumPy的数组中,我会使用numpy.max函数。将列表转化为NumPy数组是一项相当昂贵的操作。 - John La Rooy
4个回答

61

根据我的计时,如果你已经有了numpy数组 a,那么应该使用 a.max(源代码说明如果a.max可用,则与np.max相同)。但如果你有内置列表,则大多数时间需要将其转换为np.ndarray => 这就是为什么在你的计时中max更好。

实质上:如果是np.ndarray,则使用a.max;如果是list并且不需要所有np.ndarray的机制,则使用标准的max


44

我也对此很感兴趣,用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()

13

最好使用像Python timeit模块这样的工具来测试。这样您就可以在自己的环境中测试自己的数据,而不是依赖于各种测试数据和环境的第三方,这些数据和环境并不一定代表您的环境。


2
我在一个随机的包含600个浮点数的列表上尝试了这个操作。 || np.max() + np.min() -> 1.093 毫秒 || max() + min() -> 0.092 毫秒 - Froyo

2

numpy.minnumpy.max 在语义上(和调用方式)与内置函数有略微不同,因此选择不应该只考虑速度。如果需要处理多维数据,则使用numpy版本。如果只是使用Python列表或其他不涉及维度的数据类型,则使用内置函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接