NumPy:填充数组中1周围的字段

Nar*_*san 2 python arrays numpy matrix

假设我有一个4x4矩阵,如下所示:

[[0, 0, 0, 0]
 [0, 0, 1, 0]
 [0, 0, 0, 0]
 [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

我想写一个函数,它接受一个的所有4个周围的字段,并将它们变成1.

上述矩阵将变为:

[[0, 0, 1, 0]
 [0, 1, 1, 1]
 [0, 0, 1, 0]
 [0, 0, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用if语句,但我真的想优化我的代码.

矩阵只包含0和1.如果1位于矩阵的边缘,则1不应该环绕,即如果最左边的字段是1,则最右边的字段仍然保持为0.此外,我使用的是Python 3.5

有没有更多数学或简洁的方法来做到这一点?

Ale*_*ley 6

这看起来像二元扩张.SciPy中有一个可以有效实现这一功能的功能:

>>> from scipy.ndimage import binary_dilation
>>> x
array([[0, 0, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

>>> binary_dilation(x).astype(int)
array([[0, 0, 1, 0],
       [0, 1, 1, 1],
       [0, 0, 1, 0],
       [0, 0, 0, 0]])
Run Code Online (Sandbox Code Playgroud)

边缘处的1s处理,因为你已经指定它们应该是(即没有包装).

有关更多选项和参数,请参阅文档.