我有一个60000 × 200的numpy数组,我想通过在右边添加一列1来使它成为60000 × 201(这样每行都是[prev, 1])。与axis = 1连接不起作用,因为连接似乎要求所有输入数组具有相同的维数。我该怎么做呢?
[prev, 1]
axis = 1
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.]])
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.]])
oxf4rvwz3#
所有stack的变体(包括append和insert)都是以concatenate为结束,只是在它之前进行了某种数组整形。
stack
append
insert
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以及构造维数和必要形状匹配的数组的各种方法。
guz6ccqo4#
首先要考虑的是numpy数组并不意味着改变大小,所以你应该问问自己,你能不能创建一个60k x 201的原始矩阵,然后填充最后一列,这通常是最好的。如果确实必须执行此操作,请参见How to add column to numpy array
numpy
vdgimpew5#
我认为numpy方法column_stack更有趣,因为你不需要创建一个列numpy数组来将它堆叠在感兴趣的矩阵中,而使用column_stack你只需要创建一个普通的numpy数组。
5条答案
按热度按时间kninwzqo1#
让我举一个非常简单的例子,尺寸要小得多,原理应该是一样的。
cygmwpex2#
使用numpy索引技巧将1D向量追加到2D数组
oxf4rvwz3#
所有
stack
的变体(包括append
和insert
)都是以concatenate
为结束,只是在它之前进行了某种数组整形。这里我创建了一个1的数组(3,1),来匹配数组(3,4),如果我想添加一个新行,我会创建一个数组(1,4).
虽然这些变体很方便,但如果您正在学习,则应该熟悉
concatenate
以及构造维数和必要形状匹配的数组的各种方法。guz6ccqo4#
首先要考虑的是
numpy
数组并不意味着改变大小,所以你应该问问自己,你能不能创建一个60k x 201的原始矩阵,然后填充最后一列,这通常是最好的。如果确实必须执行此操作,请参见How to add column to numpy array
vdgimpew5#
我认为numpy方法column_stack更有趣,因为你不需要创建一个列numpy数组来将它堆叠在感兴趣的矩阵中,而使用column_stack你只需要创建一个普通的numpy数组。