簡體   English   中英

串聯numpy數組

[英]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))

對我來說,這更具表現力,可以滿足您的需求,並且具有一個直觀的名稱,並且只需一個參數即可。

您必須使用numpy.vstack 嘗試:

import numpy as np

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

x1x2x3的大小必須相同。

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM