数组中的矩形掩码

时间:2014-09-29 19:47:00

标签: python numpy mask

我想在数组的边缘应用一个掩码,例如在3x3数组中:

0 0 0
0 1 0
0 0 0

在堆栈中我找到了这个命令,但我不能应用第二个条件来获取我的特定数组......

import numpy as np
np.logical_and.outer(np.arange(3) >= 2, np.arange(3) >= 2)

我明白了:

0 0 0
0 0 0 
0 0 1

2 个答案:

答案 0 :(得分:1)

您可以直接从1-d掩模构建2-d掩模:

In [6]: np.logical_and.outer([0,1,0],[0,1,0])
Out[6]:
array([[False, False, False],
       [False,  True, False],
       [False, False, False]], dtype=bool)

编辑: 对于通用案例,您可以执行以下操作:

In [11]: np.logical_and.outer([0]+[1]*3+[0],[0]+[1]*5+[0]).astype(int)
Out[11]:
array([[0, 0, 0, 0, 0, 0, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 1, 1, 1, 1, 1, 0],
       [0, 0, 0, 0, 0, 0, 0]])

答案 1 :(得分:1)

你总是可以构建一个掩码来取消选择第一行和最后一行/列,如下所示:

>>> mask = np.ones((3, 3), dtype=bool)
>>> mask 
array([[True, True, True],
       [True, True, True],
       [True, True, True]], dtype=bool)

>>> mask[0], mask[-1], mask[:,0], mask[:,-1] = False, False, False, False
>>> mask
array([[ False,  False,  False],
       [ False,  True,   False],
       [ False,  False,  False]], dtype=bool)