我有一個這樣的數組:如何將一個圓形的遮罩應用到一個numpy數組?
>>> np.ones((8,8))
array([[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.]])
我創建一個半徑3這樣一個圓盤狀面膜:
y,x = np.ogrid[-3: 3+1, -3: 3+1]
mask = x**2+y**2 <= 3**2
這給:
>> mask
array([[False, False, False, True, False, False, False],
[False, True, True, True, True, True, False],
[False, True, True, True, True, True, False],
[ True, True, True, True, True, True, True],
[False, True, True, True, True, True, False],
[False, True, True, True, True, True, False],
[False, False, False, True, False, False, False]], dtype=bool)
現在,我想能夠將這個掩碼應用到我的數組中,使用任何元素作爲中心點。 因此,例如,與(1,1)的中心點,我想得到這樣一個數組:
>>> new_arr
array([[ True, True, True, True, 1., 1., 1., 1.],
[ True, True, True, True, True, 1., 1., 1.],
[ True, True, True, True, 1., 1., 1., 1.],
[ True, True, True, True, 1., 1., 1., 1.],
[ 1., True, 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.]])
有沒有申請這個面膜的簡單方法?
編輯:我不應該有混合布爾和浮動 - 這是誤導。
>>> new_arr
array([[ 255., 255., 255., 255., 1., 1., 1., 1.],
[ 255., 255., 255., 255., 255., 1., 1., 1.],
[ 255., 255., 255., 255., 1., 1., 1., 1.],
[ 255., 255., 255., 255., 1., 1., 1., 1.],
[ 1., 255., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1., 1., 1., 1.]])
這更多是我需要的結果。
陣列[掩模] = 255
會掩蓋使用陣列中心點(0 +半徑,0 +半徑)。
但是,我希望能夠在任何點(y,x)放置任意大小的面具,並自動修剪以適合它。
它的工作原理...那是相當的黑客,與陣列的複製和0/1改變它的D型...乘法是由@ 9000建議的正規途徑。 – mac 2011-12-27 17:19:59
@mac是的,我同意。我希望從OP得到一些反饋,以找出他真正想要的東西。 – jcollado 2011-12-27 17:52:17
我很抱歉誤導。我在帖子中澄清了我的問題。我想要的是一種方式來獲得由掩模覆蓋原來的數組中的元素,給定一箇中心點(Y,X)的面具。然後我可以根據需要操縱它們。 – user816555 2011-12-27 18:39:45