gpt4 book ai didi

python - 为什么 numpy.array 这么慢?

转载 作者:IT老高 更新时间:2023-10-28 20:50:57 60 4
gpt4 key购买 nike

我对此感到困惑

def main():
for i in xrange(2560000):
a = [0.0, 0.0, 0.0]

main()

$ time python test.py

real 0m0.793s

现在让我们用 numpy 来看看:

import numpy

def main():
for i in xrange(2560000):
a = numpy.array([0.0, 0.0, 0.0])

main()

$ time python test.py

real 0m39.338s

神圣的 CPU 循环 bat 侠!

使用 numpy.zeros(3) 有所改善,但仍然不够恕我直言

$ time python test.py

real 0m5.610s
user 0m5.449s
sys 0m0.070s

numpy.version.version = '1.5.1'

如果您想知道在第一个示例中是否跳过列表创建进行优化,它不是:

  5          19 LOAD_CONST               2 (0.0)
22 LOAD_CONST 2 (0.0)
25 LOAD_CONST 2 (0.0)
28 BUILD_LIST 3
31 STORE_FAST 1 (a)

最佳答案

Numpy 针对大量数据进行了优化。给它一个很小的 ​​3 长度数组,不出所料,它的性能很差。

考虑单独测试

import timeit

reps = 100

pythonTest = timeit.Timer('a = [0.] * 1000000')
numpyTest = timeit.Timer('a = numpy.zeros(1000000)', setup='import numpy')
uninitialised = timeit.Timer('a = numpy.empty(1000000)', setup='import numpy')
# empty simply allocates the memory. Thus the initial contents of the array
# is random noise

print 'python list:', pythonTest.timeit(reps), 'seconds'
print 'numpy array:', numpyTest.timeit(reps), 'seconds'
print 'uninitialised array:', uninitialised.timeit(reps), 'seconds'

输出是

python list: 1.22042918205 seconds
numpy array: 1.05412316322 seconds
uninitialised array: 0.0016028881073 seconds

似乎是数组的归零一直在花费 numpy.因此,除非您需要初始化数组,否则请尝试使用 empty。

关于python - 为什么 numpy.array 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559463/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com