Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:向numpy 2d数组添加列_Python_Arrays_Numpy - Fatal编程技术网

Python:向numpy 2d数组添加列

Python:向numpy 2d数组添加列,python,arrays,numpy,Python,Arrays,Numpy,我有一个60000x200的数组。我想通过在右边添加一列1来实现60000到201。(所以每一行都是[prev,1]) axis=1的连接不起作用,因为连接似乎要求所有输入数组具有相同的维度。 我该怎么做?我找不到任何有用的答案,关于这个问题的大多数答案都是几年前写的,所以现在情况可能不同了 让我来举一个非常简单的例子,尺寸要小得多。原则应该是一样的 a = np.zeros((6,2)) array([[ 0., 0.], [ 0., 0.],

我有一个60000x200的数组。我想通过在右边添加一列1来实现60000到201。(所以每一行都是[prev,1]) axis=1的连接不起作用,因为连接似乎要求所有输入数组具有相同的维度。
我该怎么做?我找不到任何有用的答案,关于这个问题的大多数答案都是几年前写的,所以现在情况可能不同了

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

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

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

如果您真的必须这样做,请参见

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

在封面下,所有
堆栈
变体(包括
附加
插入
)最终都会执行一个
串联
。它们只是在它之前进行某种数组重塑

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)数组


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

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

那是真的。。谢谢,这很有效!我的阵列现在是60000到201。谢谢这里的技巧是将np.ones()定义为(6,1)而不是(6,),这是我一直在做的。有趣的是,如果你定义
b=np.ones(6)
,这个过程将无法工作。有时候Numpy会让我呕吐。@SanduUrsu你需要做
b=np。为了工作,
column\u stack
做了什么(在封面下)不同于
hstack
?做了同样的事情,但不需要创建列数组。您可以使用线阵列,并且
列\u堆栈
将其堆叠为要与新列一起堆叠的矩阵的新列。使用
hstack
时,必须使用列数组,否则它将返回错误。