【问题标题】:Crop sides of a numpy array by w elements (where w may be zero)通过 w 元素裁剪 numpy 数组的边(其中 w 可能为零)
【发布时间】:2021-03-28 23:04:26
【问题描述】:

我想概括以下内容以允许裁剪元素的数量w 可能为零:

a = np.arange(42).reshape(6, 7)
w = 1  # Number of elements to crop on each side.
print(a[w:-w, w:-w])

而且在此泛化到任意维度:

def crop(array, width):
  width = np.broadcast_to(width, array.ndim)
  return array[tuple(slice(w, -w) for w in width)]

问题是带有stop=0slice 不返回任何元素。 什么是最优雅的解决方案?有没有现成的库函数?

如果numpy.pad 允许裁剪负值,那就太好了,但显然它不允许。

【问题讨论】:

    标签: numpy numpy-ndarray numpy-slicing


    【解决方案1】:

    可能需要编写自定义函数:

        def crop_array(array, width) -> np.ndarray:
          array = np.asarray(array)
          width = np.broadcast_to(width, array.ndim)
          assert np.all(width >= 0)
          return array[tuple((slice(None) if w == 0 else slice(w, -w)) for w in width)]
    
    

    【讨论】:

      猜你喜欢
      • 2017-01-20
      • 2017-06-14
      • 2018-08-05
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多