我对numpy很新,我很可能会问一个愚蠢的问题,所以如果这不是一个好问题,或者如果问题需要更多澄清,我会提前道歉。
任务
例如,我有一个图像表示为大小(10,20,3)的ndarray,我试图通过在开头和开头插入1px将数组的大小更改为(12,20,3)图像的结尾。基本上,我试图仅在图像的顶部和底部使用填充来实现图像调整大小。
这基本上是我想要实现的,用较小尺寸的数组表示。
原始数组
[ [[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]
[[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]]
已修改数组
[[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]
[[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]]
我的计划是使用以下步骤使用numpy.concatenate。
#1使用此维度(1,4,3)创建一个0的数组
#2将原始数组从步骤1连接到数组。这将创建一个像这样的新数组
[[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]
[[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]
[255. 255. 255.]]]
#3使用步骤1中的数组并将其附加到第2部分中创建的数组中,这最终会得到我想要的结果。
但是,我也想知道是否有一种方法可以使用numpy.insert,只需将(1,4,3)插入到数组的开头和结尾,而不会使用concatenate复杂化。我将不胜感激任何意见。
答案 0 :(得分:1)
使用numpy.concatenate
,您可以创建一个零数组以在任何一方连接。
zs = np.zeros((1,) + arr.shape[1:])
np.concatenate((zs, arr, zs))
另一个选项 - 创建新大小的零数组,并将内部设置为原始数组。
padded_arr = np.zeros((arr.shape[0]+2,) + arr.shape[1:])
padded_arr[1:-1, ...] = arr
最后,您可以使用numpy.pad
实现此目的,指定每个轴的焊盘宽度。
np.pad(arr, ((1,), (0,), (0,)), 'constant')