2017-09-04 74 views
1

我想垫与如下所示的恒定值的阵列(实际上是一个三维阵列,但为了简洁我在这里展示一个2D示例):如何在不填充角落的情况下填充一个numpy数组?

[[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]]] 

而对于两个填充厚度的例子将是:

[[[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

填写什么?你的阵列总是有全部? – Divakar

+0

随着价值不变,我编辑了这个问题。 – NOhs

+0

你确定关于3D案例的第二个2D切片吗?它看起来与第一片相同。 – Divakar

回答

1

我觉得这个问题实际上可以通过numpy.pad函数轻松解决。

按照numpy.pad函数文档的可能的参数的功能之一可以是模式:STR或功能 下列其中一个字符串值或用户提供的函数 (来源:https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.pad.html)。

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

希望帮助