NumPyのndarrayは、Pythonのリストとは違い、+
などの演算子で結合することができません。結合するためには、予め用意された関数を使用する必要があります。
本記事では、vstack
とhstack
を使用した結合方法を紹介します。よく使用される方法なので、覚えておくと役立つはずです。
np.hstack
まずは、np.hstack
関数のAPIドキュメントについて見ていきましょう。
numpy.hstack(tup, …, dtype=None, casting=’same_kind’)
params:
|パラメータ名|型|概要|
|:———–|:—-|:—|
|tup
|ndarrayのシーケンス|結合したい配列を指定します。
1次元配列以外はaxis=1以外同じshapeである必要があります。|
|dtype
|有効なdtype|指定したtypeになるように結合されます。|
|casting
||データ型の変換ルールを指定することができます。指定可能なオプションは以下のとおりです。
-
no
:変換しない
-
equiv
:バイトオーダーの変換のみ許可します。
- ’safe’:値が同等とされる変換のみ許可します
- ’same_kind’:float64とfloat32のような同様のデータ型でのみ変換を許可します
- ’unsafe’:強制的に変換を試みますが変換に失敗する可能性があります。
|
returns:
結合された配列(ndarray)が返されます。
hstack
関数は、2次元でいうと、水平方向に(horizontal)連結します。厳密にいうと、1次元の配列の場合は1番目のaxis方向に、2次元以上では2番目のaxis方向に連結します。結合後は、先頭を0番目としてshapeの1番目の要素数が増えることになります。
axis
に関しての詳細は、以下のページで解説しています。
NumPyの軸(axis)と次元数(ndim)とは何を意味するのか /features/numpy-axis.html
具体的に使用して確認してみましょう。
基本的な結合の仕方
3次元配列での結合
3次元の多次元配列でも確認してみます。axis=1
の方向に連結するので、3次元配列ならその中に含まれている2次元配列の行方向に連結します。
hstack関数が適用可能なshape
hstack
関数を適用可能なshapeについて確認してみます。以下の表にまとめたので、参考にしてください。shape
について知らない方は、以下のページを見ると分かると思います。
NumPyのndarrayのインスタンス変数shapeの意味 /features/numpy-shape.html
hstack できるshape の組み合わせ |
hstack できないshape の組み合わせ |
---|---|
(12, ), (2, ) | (12, ), (2, 1) |
(2, 3), (2, 4) | (2, 3), (4, 2) |
(2, 2), (2, 2) | (2, 2), (3, 2) |
(1, 2, 3), (1, 4, 3) | (1, 2, 3), (2, 2, 3) |
(2, 5, 3, 2), (2, 9, 3, 2) | (2, 5, 3, 2), (2, 5, 9, 2) |
axis=1が違うだけなら、hstack
で結合可能ですね。
np.vstack
np.vstack
の使用方法も見てみます。まずはAPIドキュメントから確認してみましょう。
numpy.vstack(tup, …, dtype=None, casting=’same_kind’)
params:
|パラメータ名|型|概要|
|:———–|:—-|:—|
|tup
|ndarrayのシーケンス|結合したい配列を指定します。
1次元配列以外はaxis=1以外同じshapeである必要があります。|
|dtype
|有効なdtype|指定したtypeになるように結合されます。|
|casting
||データ型の変換ルールを指定することができます。指定可能なオプションは以下のとおりです。
-
no
:変換しない
-
equiv
:バイトオーダーの変換のみ許可します。
- ’safe’:値が同等とされる変換のみ許可します
- ’same_kind’:float64とfloat32のような同様のデータ型でのみ変換を許可します
- ’unsafe’:強制的に変換を試みますが変換に失敗する可能性があります。
|
returns:
結合された配列(ndarray)が返されます。
先程のnp.hstack
とAPIドキュメントは全く一緒です。
こちらは、2次元でいうと垂直方向(vertical)に連結します。厳密にいうと、axis=0
の方向です。
基本的な結合
以下の例で使用方法を確認してみましょう。
3次元配列の結合
次に、3次元配列でも確認してみます。2次元配列をもう1つ付け加える方向に配列同士を連結します。
vstack関数が適用可能なshape
最後に、こちらもvstack
可能なshape
を確認してみます。以下の表にまとめたので、参考にしてください。
vstack できるshape の組み合わせ |
vstack できないshape の組み合わせ |
---|---|
(12, ), (2, ) | (12, ), (2, 1) |
(2, 3), (3, 3) | (2, 3), (2, 4) |
(2, 2), (2, 2) | (2, 2), (2, 5) |
(1, 2, 3), (4, 2, 3) | (1, 2, 3), (1, 2, 1) |
(2, 5, 3, 2), (9, 5, 3, 2) | (2, 5, 3, 2), (2, 7, 3, 2) |
axis=0
の要素数が違うだけなら、vstack
で結合することができます。