2016-07-22 40 views
1

給定一個t1xt2xn數組和一個m1xm2掩碼,如何獲得其中n-dim數組與掩碼卷積的t1xt2xn數組?如何在Python中使用掩碼來旋轉數組的數組?

函數scipy.signal.convolve無法處理,因爲它只接受具有相同維數的輸入。

例如具有「相同的」邏輯:

in1 = 
[[[0,1,2],[3,4,5],[6,7,8]], 
[[9,10,11],[12,13,14],[15,16,17]], 
[[18,19,20],[21,22,23],[24,25,26]]] 

in2 = 
[[0,1,0], 
[0,1,0], 
[0,1,0]] 

output = 
[[[0,0,0],[15,17,19],[0,0,0]], 
[[0,0,0],[36,39,42],[0,0,0]], 
[[0,0,0],[33,35,37],[0,0,0]]] 
+0

你的m1xm2面具的形狀是(t1,t2)嗎? – frist

+0

@frist不一定:m1 <= t1和m2 <= t2 –

+0

那麼它應該如何工作?你能給我們舉例輸入t1xt2xn,m1xm2和卷積的預期結果嗎? – frist

回答

0

我很抱歉,但我有不強的數學背景,所以我的答案可能是錯的。無論如何,如果你需要使用掩碼選擇你應該將其轉換爲布爾類型。例如:

in1 = np.array([[[0,1,2], [3,4,5], [6,7,8]], 
       [[9,10,11], [12,13,14], [15,16,17]], 
       [[18,19,20], [21,22,23], [24,25,26]]]) 

in2 = np.array([[0, 1, 0], 
       [0, 1, 0], 
       [0, 1, 0]]) 

mask = in2.astype(bool) 

print(in1[mask]) 
# [[ 3 4 5] 
# [12 13 14] 
# [21 22 23]] 

in3 = np.zeros(in1.shape) 

in3[mask] = np.convolve(in1[mask].ravel(), in2.ravel(), 'same').reshape(mask.shape) 

print(in3) 

# [[[ 0. 0. 0.] 
# [ 15. 17. 19.] 
# [ 0. 0. 0.]] 
# 
# [[ 0. 0. 0.] 
# [ 36. 39. 42.] 
# [ 0. 0. 0.]] 
# 
# [[ 0. 0. 0.] 
# [ 33. 35. 37.] 
# [ 0. 0. 0.]]] 

我不是很確定最後一部分,特別是關於重塑,但我希望你有一個主意。

相關問題