我在目前正在进行的项目中遇到了一个小问题。
开门见山,假设我有一个二维 numpy.array
- 我将其命名为 arr
。
我需要切片 arr
,但是这个切片必须包含一些填充,具体取决于所选的间隔。
例子:
arr = numpy.array([
[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10],
[ 11, 12, 13, 14, 15],
[ 16, 17, 18, 19, 20],
[ 21, 22, 23, 24, 25]
])
实际上,numpy
对 arr[3:7, 3:7]
的响应是:
array([[19, 20],
[24, 25]])
但我需要填充它,就好像 arr
比实际的大。
这是我需要的响应 arr[3:7, 3:7]
:
array([[19, 20, 0, 0],
[24, 25, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0]])
这种填充也应该出现在负指数的情况下。如果请求的切片大于整个图像,则填充必须出现在所有边上(如果需要)。
另一个例子,负指数。这是 arr[-2:2, -1:3]
的预期结果:
array([[ 0, 0, 0, 0],
[ 0, 0, 1, 2],
[ 0, 0, 6, 7],
[ 0, 0, 11, 12]])
有没有原生的 numpy
函数?如果没有,我知道如何实现吗?
最佳答案
关于问题的第一部分,您可以使用简单的索引,并且可以使用 numpy.zeros_like
创建数组的 zero_like
然后分配特殊部分:
>>> new=numpy.zeros_like(arr)
>>> part=arr[3:7, 3:7]
>>> i,j=part.shape
>>> new[:i,:j]=part
>>> new
array([[19, 20, 0, 0, 0],
[24, 25, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
但对于第二种情况,您不能像这样对 numpy 数组使用负索引。负索引被解释为从数组末尾开始计数,因此如果您从 开始计数-2
实际上在 5x5 数组中 没有 -2 和 2 之间的任何行,因此结果将是一个空数组:
>>> arr[-2:2]
array([], shape=(0, 5), dtype=int64)
关于python - 如何获得多维数组的填充切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962593/