相关疑难解决方法(0)

numpy ufuncs速度vs循环速度

我已经阅读了很多"避免与numpy循环".所以,我试过了.我正在使用此代码(简化版).一些辅助数据:

 In[1]: import numpy as np
        resolution = 1000                             # this parameter varies
        tim = np.linspace(-np.pi, np.pi, resolution) 
        prec = np.arange(1, resolution + 1)
        prec = 2 * prec - 1
        values = np.zeros_like(tim)
Run Code Online (Sandbox Code Playgroud)

我的第一个实现是for循环:

 In[2]: for i, ti in enumerate(tim):
           values[i] = np.sum(np.sin(prec * ti))
Run Code Online (Sandbox Code Playgroud)

然后,我摆脱了显式for循环,并实现了这一点:

 In[3]: values = np.sum(np.sin(tim[:, np.newaxis] * prec), axis=1)
Run Code Online (Sandbox Code Playgroud)

对于小型阵列来说,这个解决方案更快,但是当我扩大规模时,我有这样的时间依赖: 在此输入图像描述

我缺少什么或是正常行为?如果不是,在哪里挖?

编辑:根据评论,这里有一些额外的信息.用IPython中的测量的时间%timeit%%timeit,在新内核进行每一次运行.我的笔记本电脑是acer aspire v7-482pg(i7,8GB).我正在使用:

  • python 3.5.2
  • numpy 1.11.2 + mkl
  • Windows 10

python performance for-loop numpy numpy-ufunc

13
推荐指数
1
解决办法
2878
查看次数

标签 统计

for-loop ×1

numpy ×1

numpy-ufunc ×1

performance ×1

python ×1