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

时间:2016-04-27 00:19:03

标签: python arrays numpy

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

5 个答案:

答案 0 :(得分:12)

让我举一个尺寸小得多的简单例子。原则应该是一样的。

while (ansr != 'y' && ansr != 'n') {
    printf("Invalid answer, Please try again.");
    while ( getchar() != '\n');
    scanf("%c", &ansr);
}

答案 1 :(得分:3)

使用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.]])

答案 2 :(得分:2)

首先要考虑的是numpy数组实际上并不意味着改变大小。所以你应该问问自己,你可以创建60k x 201的原始矩阵,然后填写最后一列。这通常是最好的。

如果你真的必须这样做,请参阅 How to add column to numpy array

答案 3 :(得分:2)

在封面下,所有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]])

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

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

答案 4 :(得分:0)

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