Car*_*dia 9 python arrays numpy matrix
我有性能瓶颈.我正在计算大型阵列(250行和130万列)的列式意义,我在我的应用程序中这样做超过一百万次.
我在Python中的测试用例:
import numpy as np
big_array = np.random.random((250, 1300000))
%timeit mean = big_array.mean(axis = 0) # ~400 milliseconds
Run Code Online (Sandbox Code Playgroud)
Numpy在我的机器上运行大约400毫秒,在单核上运行.我已经尝试了不同语言的其他几个矩阵库(Cython,R,Julia,Torch),但发现只有Julia才能击败Numpy,花费大约250毫秒.
任何人都可以提供这项任务中性能大幅改善的证据吗?也许这是适合GPU的任务?
编辑:我的应用程序明显受内存限制,只需一次访问大型数组的元素,而不是重复访问,其性能得到显着提高.(见下面的评论.)
朱莉娅,如果我没弄错的话,在内存中使用fortran排序,而不是默认使用C内存布局的numpy.因此,如果您重新安排事物以遵循相同的布局,以便平均值沿着连续的内存发生,那么您将获得更好的性能:
In [1]: import numpy as np
In [2]: big_array = np.random.random((250, 1300000))
In [4]: big_array_f = np.asfortranarray(big_array)
In [5]: %timeit mean = big_array.mean(axis = 0)
1 loop, best of 3: 319 ms per loop
In [6]: %timeit mean = big_array_f.mean(axis = 0)
1 loop, best of 3: 205 ms per loop
Run Code Online (Sandbox Code Playgroud)
或者你可以改变你的尺寸并取平均值在另一个轴上:
In [10]: big_array = np.random.random((1300000, 250))
In [11]: %timeit mean = big_array.mean(axis = 1)
1 loop, best of 3: 205 ms per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |