python 向numpy二维数组添加列

x4shl7ld  于 2023-02-21  发布在  Python
关注(0)|答案(5)|浏览(191)

我有一个60000 × 200的numpy数组,我想通过在右边添加一列1来使它成为60000 × 201(这样每行都是[prev, 1])。
axis = 1连接不起作用,因为连接似乎要求所有输入数组具有相同的维数。
我该怎么做呢?

kninwzqo

kninwzqo1#

让我举一个非常简单的例子,尺寸要小得多,原理应该是一样的。

a = np.zeros((6,2))
    array([[ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.],
           [ 0.,  0.]])
b = np.ones((6,1))
    array([[ 1.],
           [ 1.],
           [ 1.],
           [ 1.],
           [ 1.],
           [ 1.]])

np.hstack((a,b))
array([[ 0.,  0.,  1.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  1.]])
cygmwpex

cygmwpex2#

使用numpy索引技巧将1D向量追加到2D数组

a = np.zeros((6,2))
# array([[ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.],
#        [ 0.,  0.]])
b = np.ones(6) # or np.ones((6,1))
#array([1., 1., 1., 1., 1., 1.])
np.c_[a,b]
# array([[0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.],
#        [0., 0., 1.]])
oxf4rvwz

oxf4rvwz3#

所有stack的变体(包括appendinsert)都是以concatenate为结束,只是在它之前进行了某种数组整形。

In [60]: A = np.arange(12).reshape(3,4)

In [61]: np.concatenate([A, np.ones((A.shape[0],1),dtype=A.dtype)], axis=1)
Out[61]: 
array([[ 0,  1,  2,  3,  1],
       [ 4,  5,  6,  7,  1],
       [ 8,  9, 10, 11,  1]])

这里我创建了一个1的数组(3,1),来匹配数组(3,4),如果我想添加一个新行,我会创建一个数组(1,4).
虽然这些变体很方便,但如果您正在学习,则应该熟悉concatenate以及构造维数和必要形状匹配的数组的各种方法。

guz6ccqo

guz6ccqo4#

首先要考虑的是numpy数组并不意味着改变大小,所以你应该问问自己,你能不能创建一个60k x 201的原始矩阵,然后填充最后一列,这通常是最好的。
如果确实必须执行此操作,请参见How to add column to numpy array

vdgimpew

vdgimpew5#

我认为numpy方法column_stack更有趣,因为你不需要创建一个列numpy数组来将它堆叠在感兴趣的矩阵中,而使用column_stack你只需要创建一个普通的numpy数组。

相关问题