我有一个60000乘200 numpy阵列。我希望通过在右侧添加一列1到201来使其达到60000。 (所以每一行都是[prev,1]) 与axis = 1连接并不起作用,因为看起来连接需要所有输入数组具有相同的维度。 我该怎么做?我找不到任何现有的有用答案,而且大多数答案都是在几年前编写的,所以现在情况可能会有所不同。
答案 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
个变体(包括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]])
这里我创建了一个(3,1)1s数组,以匹配(3,4)数组。如果我想添加一个新行,我会创建一个(1,4)数组。
虽然这些变化很方便,但如果你正在学习,你应该熟悉concatenate
以及构建匹配多个维度和必要形状的数组的各种方法。
答案 4 :(得分:0)
我认为numpy方法 column_stack 更有趣,因为你不需要创建一个列numpy数组来将它堆叠在感兴趣的矩阵中。使用 column_stack ,您只需要创建一个普通的numpy数组。