2015-10-14 33 views
1

比方說,我有一個數組A [I,J]我想通過做這樣的事情來計算一個新的數量B [I,J]:numpy的陣列,以取代一個for循環

for i in arange(1, n): 
    B[i,j+1] = a*A[i-1,j] + b*A[i,j]+ c*A[i+1,j] 

什麼numpy的功能可以用來把它變成一個純粹的數組操作?

我在想np.cumprod,但目前還不清楚如何將係數合併到計算中。

A.shape將是(n + 1,j)。

+0

A.shape是什麼? –

回答

2

定義A_left = A[:-2, :]A_middle = A[1:-1, :]A_right = A[2:, :]

然後B = a*A_left + b*A_middle + c*A_right

+0

我認爲賦值部分是'B [1:-1] = ..'。 – Divakar

+0

是的,但實際上這個問題有點不恰當,因爲當我是n-1時,OP的最後一行引發了一個IndexError。 –

+0

這是因爲OP最有可能具有A作爲'n + 1'作爲計算'A [i + 1,j]'的行數。 – Divakar

1

如果你不介意比特信號處理的,你可以有一個通用的解決方案(在這裏,你可以沿着指定多個元素意義上的通用a,bc,用於從A縮放元素)使用signal.convolve2d

這將類似於這個other solution其中與這種情況相關的卷積理論以更詳細的方式處理。執行看起來像這樣 -