Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 串联numpy数组_Python_Python 2.7_Numpy - Fatal编程技术网

Python 串联numpy数组

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) 如何正确使用连接函数?或者有更

我想将三个一维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)
如何正确使用连接函数?或者有更好的方法吗?

您必须使用。尝试:

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。这是所有答案在使用
连接之前所做的。