如何将一行和一列添加到numpy数组中。阵列的形状(480,639,3),我希望有形状(481,640,3)。新的行和列应填充零,如下所示:
[43,42,40], ... [64,63,61], [0,0,0]
... ... ... [0,0,0]
[29,29,29], ... [38,37,35], [0,0,0]
[0,0,0], [0,0,0] ... [0,0,0]
要添加新列,请执行以下操作:
b = numpy.zeros((480,640,3), dtype = int)
b[:,:-1] = old_arry
但我怎么能添加一行?我是否要使用循环或存在更好的方法来执行此操作?
答案 0 :(得分:3)
您可以使用pad
>>> old = np.random.random_integers(0, 100, size=(480, 640))
>>> np.pad(old, pad_width=((0, 1), (0, 1)), mode='constant')
array([[ 66, 22, 51, ..., 18, 15, 0],
[ 28, 12, 43, ..., 8, 38, 0],
[ 55, 43, 89, ..., 67, 58, 0],
...,
[ 17, 25, 100, ..., 12, 52, 0],
[ 97, 59, 82, ..., 38, 97, 0],
[ 0, 0, 0, ..., 0, 0, 0]])
>>> np.pad(old, pad_width=((0, 1), (0, 1)), mode='constant').shape
(481, 641)
>>>
您也可以将其写为np.pad(old, ((0, 1), (0, 1)), mode='constant')
,即不使用pad_width
关键字。要为填充区域设置不同的值,请参阅文档中的constant_values
参数。
答案 1 :(得分:1)
您可以使用np.vstack
逐行堆叠数组,并使用np.hstack
按列堆叠数组。见代码:
>>> import numpy as np
>>> x = np.arange(480*639*3).reshape((480,639,3))
>>> new_row = np.zeros((639,3))
>>> x = np.vstack((x,new_row[np.newaxis,:,:]))
>>> x.shape
(481, 639, 3)
>>> new_col = np.zeros((481,3))
>>> x = np.hstack([x, new_col[:,np.newaxis,:]])
>>> x.shape
(481, 640, 3)
答案 2 :(得分:0)
您可以一次展开两个尺寸,也可以一次展开一个尺寸。操作相同 - 创建目标数组,并将旧数据复制到适当的切片。 pad
在幕后做了这件事。
b = numpy.zeros((481,640,3), dtype = int)
b[:-1,:-1,:] = old_arry
例如:
In [527]: x=np.ones((2,2,3))
In [528]: y=np.zeros((3,3,3))
In [529]: y[:-1,:-1:,:]=x
In [530]: y
Out[530]:
array([[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 0., 0., 0.]],
[[ 1., 1., 1.],
[ 1., 1., 1.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 0., 0.]]])