我想推广以下内容,以允许裁剪元素的数量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=0的slice不返回任何元素。最优雅的解决方案是什么?有没有现成的库函数?
如果numpy.pad允许使用负值进行裁剪,那就太好了,但显然它不允许这样做。
发布于 2021-03-30 14:22:08
可能需要编写一个自定义函数:
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)]https://stackoverflow.com/questions/66846983
复制相似问题