当前位置: 首页 > 面试题库 >

为什么numpy.array这么慢?

宁飞宇
2023-03-14
问题内容

我对此感到困惑

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周期蝙蝠侠!

使用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。



 类似资料:
  • 问题内容: 这是所有编程语言所共有的吗?在进行多次打印后再执行println似乎更快,但是将所有内容移动到字符串中并仅进行打印似乎最快。为什么? 编辑:例如,Java可以在不到一秒钟的时间内找到所有高达100万的质数- 但要进行打印,然后在自己的println中将它们全部输出可能需要几分钟!最多可打印100亿小时! 例如: 问题答案: 速度并不慢,而是由主机操作系统提供的与控制台连接的基础。 您可

  • 问题内容: Magento通常这么慢吗? 这是我的第一次使用体验,管理面板只需花一些时间即可加载和保存更改。这是带有测试数据的默认安装。 托管该服务器的服务器可超快地服务于其他非Magento站点。Magento使它如此缓慢的PHP代码有什么用,该如何解决? 问题答案: 我只是切身参与优化Magento的性能,但这是系统速度如此缓慢的一些原因 Magento的某些部分使用在MySQL之上实现的EA

  • 问题内容: 在有人质疑使用的事实之前,我先说一下,出于内存和性能的原因,我需要在特定的应用程序中使用它。[1] 因此,到目前为止,我一直使用并假定这是最有效的方法。但是,自古以来我就注意到它是软件的瓶颈。[2] 然后,就在最近,我试图用一个巨大的映射替换,在该映射中放置/获取字符串,以便每次获得唯一的实例。我以为这会慢一些…但是事实恰恰相反!它快得多了!通过推送/轮询地图(实现完全相同)来替换,可

  • 问题内容: IDLE是我最喜欢的Python编辑器。它提供了非常漂亮和直观的Python shell,它对单元测试和调试非常有用,并且还提供了一个简洁的调试器。 但是,在IDLE下执行的代码异常缓慢。 疯狂是指慢 三个数量级 : 重击 需要0.052秒, 闲 需要: 大约慢了2000倍。 有什么想法或想法可以改善这一点吗?我想这与后台调试器有关,但是我不确定。 亚当 问题答案: 问题是文本输出而不

  • ChatGPT为什么这么火?

  • 问题内容: 我用 和做了一些测试 。他们似乎都慢于。是因为精度更高吗?计算斜边函数的方法是什么?令人惊讶的是,我在文档中找不到任何表明性能不佳的迹象。 问题答案: 这不是一个简单的sqrt函数。您应该检查此链接以实现算法:http : //www.koders.com/c/fid7D3C8841ADC384A5F8DE0D081C88331E3909BF3A.aspx 它具有while循环以检查收