2016-04-29 10 views
1

1つの配列X(3列)に3つの1次元numpy配列(x1、x2、x3)を連結する必要があります。私は既に連結機能を試しましたが、何か間違っていると思います。少なくとも私は、エラーメッセージが表示されました:numpy配列を連結する

私は次のことを試してみました:

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) 

正しい連結機能を使用するには?それとももっと良い方法がありますか?

+0

ので、何 '軸はありません= 1 'となる。最初に配列を2次元に変換する必要があります。これは、すべての答えが '連結 'を使う前に行うことです。 – hpaulj

答えて

4

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

私にこれは、より表現で何をしたいし、かつ必要な1つの少ない引数で直感的な名前を持っています。

+0

ありがとう、これは完璧に動作します! – Rchieve

+0

@Rchieve:これで問題が解決した場合は、左側のチェックマークをクリックしてこの回答を「受け入れる」ことができます。ようこそ。 –

+1

@ John Zwinck:ヒントありがとう! 「遅延」がありました。私は最初の10分間に答えをチェックすることができませんでした!今終わった! (: – Rchieve

0

numpy.vstackを使用する必要があります。試してみてください:

import numpy as np 

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

x1x2とのサイズは同じでなければなりません。私はそれをこのようにしてください

+0

あなたはhstackを1つの場所で言うが、別の場所ではvstackと言う。どちらですか? –

+0

申し訳ありません、私は答えを編集しました! –

0

concatenateを使用する正しい方法は、アレイを再構成して、(n,1) 2dアレイにすることです。

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が必要です。ここで私は、これは、より読みやすいと思いますけれども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]]) 

を何です

0

ナンシーはstack function(NumPy 1.10以降)です。これにより、理にかなっている限り(例えば、3次元の1次元配列を連結することはできません)、任意の次元に沿って連結することができます。例えば

、2つの1次元配列の要素をペアリング:それらは1Dある

>>> 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のタプルであることに注意してください)

関連する問題