実行中
import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
t3 = np.concatenate((t1,t2),axis=1)
結果として
Traceback (most recent call last):
File "<ipython-input-264-85078aa26398>", line 1, in <module>
t3 = np.concatenate((t1,t2),axis=1)
IndexError: axis 1 out of bounds [0, 1)
軸1が範囲外であると報告するのはなぜですか?
あなたのタイトルはそれを説明しています-1次元配列には2番目の軸がありません!
しかし、私のシステムでは、@Oliver W.
sのように、エラーは発生しません。
In [655]: np.concatenate((t1,t2),axis=1)
Out[655]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
これは私がaxis=0
から期待した結果です:
In [656]: np.concatenate((t1,t2),axis=0)
Out[656]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
配列が1dの場合、concatenate
はaxis
パラメーターを無視するようです。これが1.9バージョンの新しいものなのか、古いものなのかわかりません。
さらに制御するには、必要に応じて配列の次元を拡張するvstack
およびhstack
ラッパーの使用を検討してください。
In [657]: np.hstack((t1,t2))
Out[657]:
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18,
19])
In [658]: np.vstack((t1,t2))
Out[658]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[11, 12, 13, 14, 15, 16, 17, 18, 19]])
これは、Numpyの1D配列の表現方法によるものです。 reshape()を使用して次のように機能します。
t3 = np.concatenate((t1.reshape(-1,1),t2.reshape(-1,1),axis=1)
説明:これは、最初に作成されたときの1D配列の形状です。
t1 = np.arange(1,10)
t1.shape
>>(9,)
「np.concatenate」および他の多くの関数は、欠落している次元を好まない。 Reshapeは次のことを行います。
t1.reshape(-1,1).shape
>>(9,1)
Numpyの別の関数 numpy.stack
。
MATLABの cat
のように動作します。
numpy.stack
関数は、配列が連結された次元を持つことを要求しません。
これは、1つの次元が連結できないため、2次元に変更する必要があるためです。これにより、空の列を追加できます。次のコードを実行すると機能します。
import numpy as np
t1 = np.arange(1,10)[None,:]
t2 = np.arange(11,20)[None,:]
t3 = np.concatenate((t1,t2),axis=1)
print(t3)
2列の配列が必要な場合は、column_stackを使用できます。
import numpy as np
t1 = np.arange(1,10)
t2 = np.arange(11,20)
np.column_stack((t1,t2))
どの結果
[[ 1 11]
[ 2 12]
[ 3 13]
[ 4 14]
[ 5 15]
[ 6 16]
[ 7 17]
[ 8 18]
[ 9 19]]