Python:向numpy 2d数组添加列
我有一个60000x200的数组。我想通过在右边添加一列1来实现60000到201。(所以每一行都是[prev,1]) axis=1的连接不起作用,因为连接似乎要求所有输入数组具有相同的维度。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.],
我该怎么做?我找不到任何有用的答案,关于这个问题的大多数答案都是几年前写的,所以现在情况可能不同了 让我来举一个非常简单的例子,尺寸要小得多。原则应该是一样的
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
时,必须使用列数组,否则它将返回错误。