如何在不填充角落的情况下填充numpy阵列?

时间:2017-09-04 15:32:29

标签: python arrays numpy

我想用如下的常量值填充一个数组(实际上是一个3D数组,但为了简洁起见,我在这里展示了一个2D示例):

[[1,1,1],
 [1,1,1],
 [1,1,1]]

应该成为

[[0,1,1,1,0],
 [1,1,1,1,1],
 [1,1,1,1,1],
 [1,1,1,1,1],
 [0,1,1,1,0]]

现在numpy.pad会填满角落(而且3D边缘也是如此),这不是我想要的。我可以“手动”将它们设置为零,但这很繁琐,尤其是在例如的 3D

有一种简便的方法吗?

修改 为了使3D案例更加清晰,以下是一个例子:

[[[1]]]

应该成为

[[[0,0,0],
  [0,c,0],
  [0,0,0]],

 [[0,c,0],
  [c,1,c],
  [0,c,0]],

 [[0,0,0],
  [0,c,0],
  [0,0,0]]]

如果填充厚度为2,则示例为:

[[[0,0,0,0,0],
  [0,0,0,0,0],
  [0,0,c,0,0],
  [0,0,0,0,0],
  [0,0,0,0,0]],

 [[0,0,0,0,0],
  [0,0,0,0,0],
  [0,0,c,0,0],
  [0,0,0,0,0],
  [0,0,0,0,0]],

 [[0,0,c,0,0],
  [0,0,c,0,0],
  [c,c,1,c,c],
  [0,0,c,0,0],
  [0,0,c,0,0]],

 [[0,0,0,0,0],
  [0,0,0,0,0],
  [0,0,c,0,0],
  [0,0,0,0,0],
  [0,0,0,0,0]],

 [[0,0,0,0,0],
  [0,0,0,0,0],
  [0,0,c,0,0],
  [0,0,0,0,0],
  [0,0,0,0,0]]]

1 个答案:

答案 0 :(得分:1)

我认为使用numpy.pad函数可以很容易地解决这个问题。

根据numpy.pad函数文档,该函数的一个可能参数可以是模式:str或函数 以下字符串值之一或用户提供的函数 (来源:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.pad.html)。

这意味着您需要做的就是传递一个函数来检查这是否是一个角落,如果是这样的话,将值设置为0 else为1.这个诅咒可以通过对您的3D案例进行一些修改来完成

希望有所帮助