Python:向numpy 2d数组添加一列

Job*_*obs 4 python arrays numpy

我有一个60000乘200 numpy阵列.我希望通过在右侧添加一列1来使其达到60000.(所以每一行都是[prev,1])与axis = 1连接不起作用,因为看起来连接要求所有输入数组都具有相同的维度.我该怎么做?我找不到任何现有的有用答案,而且大多数答案都是几年前编写的,所以现在情况可能会有所不同.

Hun*_*Hun 16

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

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.]])
Run Code Online (Sandbox Code Playgroud)

  • 这可行!我的数组现在是60000 by 201。谢谢。这里的技巧是将np.ones()定义为(6,1)而不是(6,),这就是我一直在做的事情。 (2认同)

Sto*_*one 11

使用 numpy 索引技巧将一维向量附加到二维数组

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.]])
Run Code Online (Sandbox Code Playgroud)


hpa*_*ulj 5

在覆盖下所有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]])
Run Code Online (Sandbox Code Playgroud)

在这里,我制作了一个 (3,1) 数组,以匹配 (3,4) 数组。如果我想添加一个新行,我会创建一个 (1,4) 数组。

虽然这些变化很方便,但如果您正在学习,您应该熟悉concatenate构建在维数和必要形状上匹配的数组的各种方法。