我想在数组的边缘应用一个掩码,例如在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
答案 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)