我已经阅读了很多"避免与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).我正在使用: