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

标签 python arrays numpy matrix

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

[[0, 0, 0, 0]
 [0, 0, 1, 0]
 [0, 0, 0, 0]
 [0, 0, 0, 0]]

我想编写一个函数,获取一个的所有 4 个周围字段并将它们也变成 1。

上面的矩阵会变成:

[[0, 0, 1, 0]
 [0, 1, 1, 1]
 [0, 0, 1, 0]
 [0, 0, 0, 0]]

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

矩阵只包含 0 和 1。如果 1 位于矩阵的边缘,则 1 不应回绕,即如果最左边的字段为 1,则最右边的字段仍为 0。另外,我使用的是 Python 3.5

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

最佳答案

这看起来像二进制膨胀。 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]])

边缘的 1 按照您指定的方式处理(即不换行)。

参见 documentation进一步的选择和论据。

关于python - NumPy:填充数组中 1 周围的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223114/

相关文章:

java - 如何显示二维数组的行数和列数?

python - Numpy 八倍精度 float 和 128 位整数。为什么以及如何?

python - 如何在 Jupyter 笔记本中包装代码/文本

javascript - 将字符串转换为数组并将其另存为新数组,不返回原始数组

python setup.py install 更改脚本解释器

arrays - 理解 Go 的 slice 符号

python - 使用 np.where 时数组索引过多

python-3.x - 以特定于列的方式填充数字的 nan

python - 在地形上方的 python/matplotlib 中绘制不均匀的 2d 数据

python - 在 Pandas 中使用自定义偏移量别名