[英]Concatenate numpy arrays
我想將三個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)
如何正確使用串聯函數? 還是有更好的方法呢?
我會這樣:
np.column_stack((x1, x2, x3))
對我來說,這更具表現力,可以滿足您的需求,並且具有一個直觀的名稱,並且只需一個參數即可。
使用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
以獲取列。
Numpy具有堆棧功能 (自NumPy 1.10起)。 只要有意義,這便允許您沿任意維度進行連接(例如,不能沿3維進行一維數組的連接)。
例如,將兩個一維數組的元素配對:
>>> 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的元組)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.