我想将三个1维numpy数组(x1,x2,x3)连接到一个数组X(3列)。我已经尝试过连接函数,但我认为我做错了。至少我收到一条错误消息:
我尝试了以下内容:
X = np.concatenate([x1, x2, x3], axis = 1)
以及:
X = np.concatenate((x1, x2, x3), axis = 1)
两次我都收到错误:
Error: IndexError: axis 1 out of bounds [0, 1)
如何使用连接函数正确?或者有更好的方法吗?
答案 0 :(得分:4)
我这样做:
np.column_stack((x1, x2, x3))
对我来说,这更具表现力,做你想要的,并且有一个直观的名字,只需要少一个参数。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用concatenate
的正确方法是重新整形数组,使它们成为(n,1)
2d数组。这是np.column_stack
做的
In [222]: x1=np.arange(3);x2=np.arange(10,13);x3=np.arange(20,23)
In [230]: ll=[x1,x2,x3]
In [231]: np.concatenate([np.array(i, copy=False, ndmin=2).T for i in ll], axis=1)
Out[231]:
array([[ 0, 10, 20],
[ 1, 11, 21],
[ 2, 12, 22]])
虽然我认为这更具可读性:
In [233]: np.concatenate([i[:,None] for i in ll],axis=1)
Out[233]:
array([[ 0, 10, 20],
[ 1, 11, 21],
[ 2, 12, 22]])
np.vstack
In [238]: np.concatenate([np.atleast_2d(i) for i in ll],axis=0)
Out[238]:
array([[ 0, 1, 2],
[10, 11, 12],
[20, 21, 22]])
但在这种情况下需要进一步transpose
来获取列。
答案 3 :(得分:0)
Numpy有一个stack function(自NumPy 1.10起)。这允许您沿任何维度连接,只要它有意义(例如,不能沿着第三维连接一维数组)。
例如,配对两个1-D数组的元素:
>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([-1, -2, -3, -4])
>>> np.stack((a, b), 1)
array([[ 1, -1],
[ 2, -2],
[ 3, -3],
[ 4, -4]])
(注意输入参数是np.arrays的元组)