[英]How to convolve array of arrays with a mask in Python?
給定一個t1xt2xn數組和一個m1xm2遮罩,如何獲得n-dim數組與遮罩卷積的t1xt2xn數組?
函數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]]]
非常抱歉,但是我沒有很強的數學背景,所以我的答案可能是錯誤的。 無論如何,如果需要使用遮罩進行選擇,則應將其轉換為布爾型。 例如:
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.]]]
我不太確定最后一部分,特別是關於重塑,但希望您有個好主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.