簡體   English   中英

高性能陣列意味着

[英]High performance array mean

我有性能瓶頸。 我正在計算大型陣列(250行和130萬列)的列式意義,我在我的應用程序中這樣做超過一百萬次。

我在Python中的測試用例:

import numpy as np
big_array = np.random.random((250, 1300000))
%timeit mean = big_array.mean(axis = 0) # ~400 milliseconds

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

或者你可以改變你的尺寸並取平均值在另一個軸上:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM