连接numpy数组

时间:2016-04-29 12:31:19

标签: python python-2.7 numpy

我想将三个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)

如何使用连接函数正确?或者有更好的方法吗?

4 个答案:

答案 0 :(得分:4)

我这样做:

np.column_stack((x1, x2, x3))

对我来说,这更具表现力,做你想要的,并且有一个直观的名字,只需要少一个参数。

答案 1 :(得分:0)

您必须使用numpy.vstack。试试:

import numpy as np

X = np.vstack([x1, x2, x3])

x1x2x3的大小必须相同。

答案 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的元组)