numpy数组 - 使用np.concatenate或np.insert在ndarray之前添加和附加零行

时间:2018-06-03 00:58:46

标签: python arrays numpy insert concatenation

我对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复杂化。我将不胜感激任何意见。

1 个答案:

答案 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')