我想用如下的常量值填充一个数组(实际上是一个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]]]
答案 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案例进行一些修改来完成
希望有所帮助