numpy - python - 如何向矩阵中添加向量

我有一个形状矩阵(13,10),我想添加零向量,直到形状变成20行和10列,


 a=([[1,2,3,.......,10],


 [1,2,3,.......,10],


 .


 . 


 [13,14,.......,10]]). # this is the 13th row


 b=([0,0,0,....0]) # has length 10




我想在开头用"b "填充"a ",直到"a "有20行,

时间:


z = np.zeros((13, 10))


x = np.zeros((1, 10))


y = np.vstack((z, x))


y.shape


(14, 10)



您可以使用np.pad在感兴趣的轴上用零填充数组,直到它具有您想要的形状。


a = np.random.randint(0,10,(10,13))


print(a.shape)


# (10, 13)



padded = np.pad(a,(((20-a.shape[0]),0),(0,0)), mode = 'constant')


print(padded.shape)


# (20, 13)



print(padded)


array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],


 [3, 6, 6, 2, 2, 7, 8, 6, 6, 8, 2, 8, 3],


 [4, 5, 4, 8, 2, 0, 6, 6, 7, 6, 4, 9, 4],


 [6, 5, 8, 1, 1, 0, 1, 4, 7, 0, 5, 4, 9],


 [9, 0, 1, 3, 3, 9, 8, 2, 0, 4, 9, 4, 4],


 [9, 6, 1, 9, 9, 9, 2, 6, 0, 9, 9, 4, 0],


 [1, 2, 4, 0, 8, 3, 1, 7, 3, 9, 2, 0, 3],


 [5, 5, 4, 0, 6, 7, 0, 1, 7, 0, 3, 2, 1],


 [6, 8, 6, 3, 8, 9, 0, 5, 9, 9, 5, 3, 6],


 [0, 3, 9, 7, 6, 1, 5, 4, 8, 7, 5, 2, 7],


 [8, 3, 4, 0, 2, 7, 4, 3, 2, 7, 1, 3, 9]])



首先,我们可以初始化一个用零填充所需形状的矩阵,然后将a复制到前13行。在任何情况下,我们都必须形成一个新的矩阵,因为我们无法摆弄现有的矩阵/向量,因为我们需要为额外的空行分配更多的内存。

你可以在下面找到例子演示:


# inputs


In [30]: a


Out[30]: 


array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],


 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],


 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],


 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],


 [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],


 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])



In [31]: b


Out[31]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])




# initialize a zero array for the desired shape


In [32]: appended = np.zeros((20, b.shape[0]))



# copy `a` to first few rows


In [33]: appended[:a.shape[0], :] = a



# expected output


In [34]: appended


Out[34]: 


array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],


 [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],


 [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],


 [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],


 [ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [11., 12., 13., 14., 15., 16., 17., 18., 19., 20.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],


 [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])



尝试np.row_stack


a = np.ones((13,10))


b = np.zeros(10)


a_pad = np.row_stack((a,b))


a_pad


array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],


 [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])



这样做直到得到想要的长度,也许是一个while循环或更简单的东西,只需堆栈b = np.zeros((7,10))来得到你想要的20个,

...