【NumPy入門 np.vstack】vstack/hstackで自由自在に配列同士を結合!

こんにちは、インストラクターのフクロウです。

この記事では、NumPyのndarray(np.array)形式の配列を結合するnp.vstackとnp.hstackを紹介します。

これらを使うことで、縦方向や横方向に配列同士をくっつけることができます。

この記事でわかること

  • np.vstackを使って縦方向に配列を結合
  • np.hstackを使って横方向に配列を結合
  • np.concatcate/np.appendを使ってvstack/hstackと同様の操作をする

使い方はとっても簡単!ササッと読んだら試してみましょう!

配列を結合する関数

配列を結合する機能を持った関数の主なものは以下の4つ

  1. np.vstack
  2. np.hstack
  3. np.concatenate
  4. np.append

です。この内、np.concatenateとnp.appendについてはそれぞれ別の記事で解説していますよ!

【Numpy入門 np.concatenate】配列同士の結合操作をマスターしよう!
更新日 : 2020年5月8日
【NumPy入門 np.append】配列末尾に要素を追加するappend関数
更新日 : 2020年5月8日

この2つの関数では、axisパラメータ指定することで、vstackやhstackのような操作ができます。

この記事では残りのvstack/hstackについて紹介していきます。

np.vstack/np.hstackの使い方

まずはサンプルとして使う配列を用意しましょう。

import numpy as np

# サンプル配列の用意
a = np.arange(10).reshape(2,5)
b = np.arange(15).reshape(3,5)
c = np.arange(8).reshape(2,4)
d = list(range(5))

# 作成した配列をprintして中身を確認
print("a")
print(a)
print("b")
print(b)
print("c")
print(c)
print("d")
print(d)
[Output]
a
[[0 1 2 3 4]
 [5 6 7 8 9]]
b
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
c
[[0 1 2 3]
 [4 5 6 7]]
d
[0, 1, 2, 3, 4]

これらの配列をnp.vstack/np.hstackで結合していきます。

np.vstackを使って縦方向に配列を結合

vstackは結合したい複数の配列をタプルでまとめて引数に受け取ります。

注意したいのは、各行の要素数が同じものでないと結合できないということです。

e = np.vstack((a,b))    # 配列と配列の結合
f = np.vstack((a,d))    # 配列とリストの結合
g = np.vstack((a,b,d))  # 3つ以上の配列の結合

print("e = np.vstack((a,b))")
print(e)
print("nf = np.vstack((a,d))")
print(f)
print("ng = np.vstack((a,b,d))")
print(g)
[Output]
e = np.vstack((a,b))
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

f = np.vstack((a,d))
[[0 1 2 3 4]
 [5 6 7 8 9]
 [0 1 2 3 4]]

g = np.vstack((a,b,d))
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [ 0  1  2  3  4]

行の数は異なっていても結合できます。

また、配列のようなオブジェクト(リストなど)についても同様にvstack(やhstack)で結合が可能です。

「結合対象の配列をタプルでまとめる」という書き方は結構忘れるので、注意しましょう!

np.hstackを使って横方向に配列を結合

hstackも使い方はvstackと同じです。

今度は列数が同じでないとエラーになります。

h = np.hstack((a,c))

print("h = np.hstack((a,c))")
print(h)
[Output]
h = np.hstack((a,c))
[[0 1 2 3 4 0 1 2 3]
 [5 6 7 8 9 4 5 6 7]]

まとめ

この記事ではnp.vstack/np.hstackについて解説しました。

特に難しいところはない関数ですが、名前を忘れることが多そうですね。

もしもこの関数を使う際にエラーが起きたら

  • vstack/hstackを取り違えていないか
  • タプルで対象配列をまとめているか
  • 配列のshapeが適切か

あたりを確認しましょう。

慣れるにはプログラムをたくさん書くのが一番です!ぜひやってみてくださいね!

第一言語はPythonです。
皆さんRustやりましょう。

あなたの目的に合わせた
SAMURAI ENGINEERの運営サービス

SAMURAI ENGINEER Pro

未経験でも挫折しないプログラミングスクール

詳細はこちら

SAMURAI ENGINEER Plus

日本最大級のサブスク型オンラインITスクール

詳細はこちら

SAMURAI ENGINEER Freelance

「一人で稼げる」スキルを身につける

詳細はこちら