自从我注意到 numpy 它只使用一个核心以来,我一直在寻找轻松地对一些简单分析代码进行多线程处理的方法,尽管事实上它应该是多线程的。
我知道 numpy 是为多个核心配置的,因为我可以看到使用 numpy.dot 的测试使用了我的所有核心,所以我只是将平均值重新实现为点积,并且它运行得更快。是否有某种原因意味着无法自行运行得这么快?我发现较大的数组也有类似的行为,尽管该比率比我的示例中显示的 3 更接近 2。
我读过很多关于类似 numpy 速度问题的帖子,显然它比我想象的要复杂。任何见解都会有所帮助,我更愿意只使用平均值,因为它更具可读性且代码更少,但我可能会切换到基于点的平均值。
In [27]: data = numpy.random.rand(10,10)
In [28]: a = numpy.ones(10)
In [29]: %timeit numpy.dot(data,a)/10.0
100000 loops, best of 3: 4.8 us per loop
In [30]: %timeit numpy.mean(data,axis=1)
100000 loops, best of 3: 14.8 us per loop
In [31]: numpy.dot(data,a)/10.0 - numpy.mean(data,axis=1)
Out[31]:
array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 1.11022302e-16, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
-1.11022302e-16])