首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用w个元素裁剪numpy数组的边(其中w可以是零)

用w个元素裁剪numpy数组的边(其中w可以是零)
EN

Stack Overflow用户
提问于 2021-03-29 07:04:27
回答 1查看 26关注 0票数 0

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

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

在这个对任意维度的推广中也是如此:

代码语言:javascript
复制
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允许使用负值进行裁剪,那就太好了,但显然它不允许这样做。

EN

回答 1

Stack Overflow用户

发布于 2021-03-30 14:22:08

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

代码语言:javascript
复制
    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)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66846983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档