根据条件填充NumPy数组



Given是形状为(m, n)inp_arr,其值为0s和255s。我想在linear_ramp模式中用k零来填充0s。

  • 0s不一定彼此相邻,因此可能存在两组0s
  • 输出维度可以大于(m, n)

我已经试过了:np.where(inp_arr== 0, np.pad(inp_arr, 2, pad_with), inp_arr),给了我一个形状不能一起广播的ValueError。CCD_ 11就是从这里取的。

示例

import numpy as np
inp_arr = np.array([[255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255],
[255, 0, 0, 255, 255, 255, 255, 255],
[255, 0, 0, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255],
[255, 255, 255, 255, 0, 0, 255, 255],
[255, 255, 255, 255, 0, 0, 255, 255],
[255, 255, 255, 255, 255, 255, 255, 255]])
out_arr = np.array([[255, 255, 255, 255, 255, 255, 255, 255],
[0, 0, 0, 0, 255, 255, 255, 255],
[0, 0, 0, 0, 255, 255, 255, 255],
[0, 0, 0, 0, 255, 255, 255, 255],
[0, 0, 0, 0, 255, 255, 255, 255],
[255, 255, 255, 0, 0, 0, 0, 255],
[255, 255, 255, 0, 0, 0, 0, 255],
[255, 255, 255, 0, 0, 0, 0, 255],
[255, 255, 255, 0, 0, 0, 0, 255]])

谢谢你的建议!:(

这看起来像是侵蚀:

>>> from scipy.ndimage import grey_erosion
>>> grey_erosion(inp_arr, size=(3,3))
array([[255, 255, 255, 255, 255, 255, 255, 255],
[  0,   0,   0,   0, 255, 255, 255, 255],
[  0,   0,   0,   0, 255, 255, 255, 255],
[  0,   0,   0,   0, 255, 255, 255, 255],
[  0,   0,   0,   0, 255, 255, 255, 255],
[255, 255, 255,   0,   0,   0,   0, 255],
[255, 255, 255,   0,   0,   0,   0, 255],
[255, 255, 255,   0,   0,   0,   0, 255],
[255, 255, 255,   0,   0,   0,   0, 255]])

最新更新