使用numpy.mean列出要比使用numpy.array慢得多

使用numpy.mean列出要比使用numpy.array慢得多,numpy,Numpy,我认为将Numpy方法直接应用于Python列表显然要慢一些。我认为它之所以慢是因为Numpy方法,比如说Numpy.mean,会在计算mean之前将列表转换成数组。但是在尝试下面的代码之后,不是这样的情况:将列表转换为数组的时间+数组的numpy平均值时间==列表的numpy平均值时间。有人能解释一下原因吗 将numpy导入为np 从时间导入时间 r=[i代表范围内的i(1000000)] 开始列表=时间() np.平均值(r) 结束列表=时间()-开始列表 开始\数组=时间() np.均值(

我认为将Numpy方法直接应用于Python列表显然要慢一些。我认为它之所以慢是因为Numpy方法,比如说Numpy.mean,会在计算mean之前将列表转换成数组。但是在尝试下面的代码之后,不是这样的情况:将列表转换为数组的时间+数组的numpy平均值时间==列表的numpy平均值时间。有人能解释一下原因吗

将numpy导入为np
从时间导入时间
r=[i代表范围内的i(1000000)]
开始列表=时间()
np.平均值(r)
结束列表=时间()-开始列表
开始\数组=时间()
np.均值(np.数组(r))
结束数组=时间()-开始数组
第一个:0.060173988342285156

第二个:0.05114173889160156


只运行一次代码,观察挂钟时间并不是衡量其速度的最佳方式,因为结果可能会受到其他进程的随机和不可预测的影响。你应该运行几次(越多越好),然后取平均值。Python有一个专门用于这种目的的模块,名为。例如,在我的机器上,我得到以下结果:

from timeit import timeit

setup = """import numpy as np
r = list(range(1000000))"""
n = 100
print(timeit("np.mean(r)", setup=setup, number=n))
print(timeit("np.mean(np.array(r))", setup=setup, number=n))
输出:

4.940829735947773
4.928034849930555
49.4 ms ± 189 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
49.5 ms ± 202 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
或使用相应的:

输出:

4.940829735947773
4.928034849930555
49.4 ms ± 189 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
49.5 ms ± 202 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
这意味着执行时间没有显著差异


我使用Windows 10、Python 3.7.3和numpy 1.16.2。

在这两种情况下,它都会转换为数组、隐藏或显式。瓶颈是数组转换。