如何将向量添加到矩阵

时间:2019-05-14 09:27:08

标签: python numpy

我有一个形状为(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行

4 个答案:

答案 0 :(得分:2)

z = np.zeros((13, 10))
x = np.zeros((1, 10))
y = np.vstack((z, x))
y.shape
(14, 10)

选中vstack

答案 1 :(得分:0)

您可以使用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]])

答案 2 :(得分: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个

答案 3 :(得分:0)

首先,我们可以初始化一个填充有零的所需形状的矩阵,然后将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.]])