Python 串联numpy数组
我想将三个一维numpy数组(x1、x2、x3)连接到一个数组X(3列)。我已经尝试了连接函数,但我认为我做错了什么。至少我收到了一条错误消息: 我尝试了以下方法:Python 串联numpy数组,python,python-2.7,numpy,Python,Python 2.7,Numpy,我想将三个一维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) 如何正确使用连接函数?或者有更
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)
如何正确使用连接函数?或者有更好的方法吗?您必须使用。尝试:
x1
、x2
和x3
的大小必须相同。必须使用。尝试:
x1
、x2
和x3
的大小必须相同。我会这样做:
np.column_stack((x1, x2, x3))
对我来说,这更具表现力,做你想要的,并且有一个直观的名称,只需要一个参数。我会这样做:
np.column_stack((x1, x2, x3))
对我来说,这更具表现力,做你想要的,并且有一个直观的名称,只需要一个较少的参数。使用
串联的正确方法是重塑数组,使其成为(n,1)
二维数组。下面是np.column\u 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 [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]])
虽然我认为这更具可读性:
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 [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 [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]])
但在这种情况下,需要进一步的转置
,以获得列。使用串联
的正确方法是重塑数组,使其成为(n,1)
二维数组。下面是np.column\u 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 [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]])
虽然我认为这更具可读性:
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 [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 [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]])
但是在这种情况下,需要进一步的转置来获取列。Numpy有一个(因为numpy1.10)。这允许您沿任何维度连接,只要有意义(例如不能沿第三维连接一维数组)
例如,将两个一维阵列的元素配对:
>>> 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.array的元组)Numpy有一个(自numpy1.10以来)。这允许您沿任何维度连接,只要有意义(例如不能沿第三维连接一维数组)
例如,将两个一维阵列的元素配对:
>>> 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.array的元组)您在一个地方说hstack,但在另一个地方说vstack。哪一个?你在一个地方说hstack,在另一个地方说vstack。是哪一个?@Rchieve:如果这解决了你的问题,你可以点击左边的复选标记“接受”这个答案。欢迎来到SO。@John Zwinck:谢谢你的提示!有一个“延迟”。在最初的10分钟里,我无法勾选答案!现在完成了!(:@Rchieve:如果这解决了你的问题,你可以通过点击左边的复选标记来“接受”这个答案。欢迎这么做。@John Zwinck:谢谢你的提示!有一个“延迟”。我在前10分钟没能选中答案!现在它完成了!(:因为它们是1d,所以没有axis=1
。你必须先将数组转换为2d。这是所有答案在使用连接之前所做的。因为它们是1d,所以没有axis=1
。你必须先将数组转换为2d。这是所有答案在使用连接之前所做的。