2015-05-18 81 views
0

我想弄清楚哪個是並行化2D numpy數組中每個單元格的單個操作的執行的最佳方法。numpy數組中的每個單元格的並行化操作

特別是,我需要爲數組中的每個單元格執行按位操作。

這是我使用的是什麼一個for週期:

for x in range(M): 
    for y in range(N): 
     v[x][y] = (v[x][y] >> 7) & 255 

我找到了一種方法做同樣的上述使用vectorize方法:

def f(x): 
    return (x >> 7) & 255 
f = numpy.vectorize(f) 

v = f(v) 

然而,使用矢量化不似乎可以提高性能。

我在this answer on StackOverflow,哪裏還Theano用Cython被引用閱讀numexpr特別是Theano似乎是一個很好的解決方案,但我找不到適合我的案例的例子。

所以我的問題是:哪個是改進上述代碼的最好方法,使用並行化和可能的GPU計算?有人可能會發布一些示例代碼來做到這一點?

+0

您可以通過爲您的按位操作定義一個函數併發送所有單元格的列表來查看'multiprocessing.Pool'。然後它會使用你所有的處理器來評估結果,但是你需要重建陣列,這會讓你失去時間。你的陣列有多大?你的計算需要多長時間? – CoMartel

+0

通過這種簡單的按元素轉換,整體性能可能會受到內存IO限制。即,將數據移入/移出GPU可能會使操作整體上變慢。 – rickhg12hs

+0

更正第一個代碼段中的縮進和變量名稱。 – hpaulj

回答

4

我不熟悉按位運算,但這裏給出了和我的代碼相同的結果,並且是矢量化的。

import numpy as np 

# make sure it is a numpy.array 
v = np.array(v) 

# vectorized computation 
N = (v >> 7) & 255 
+0

它像一個魅力,謝謝你! –

相關問題