バラバラのデータを一つに!numpyの配列結合(concatenateとvstack)をマスターしよう

こんにちは。ゆうせいです。

前回は、一つの配列の形を自由自在に変える reshape についてお話ししました。形を整える方法が分かったら、次は「別々に用意した複数のデータを、一つの大きな塊にまとめる」という技術に挑戦しましょう。

それが、今回解説する 配列の結合 です。

皆さんは、レゴブロックで遊んだことはありますか。一つひとつのパーツは小さくても、それらをカチッと繋ぎ合わせれば、大きな飛行機や城を作ることができますよね。プログラミングでも、別々の場所から集めてきたデータを合体させて、分析用の大きな表を作る作業がよく発生するのです。

縦に積むか、横に並べるか

配列をくっつけるとき、まず考えなければならないのが「どの方向に繋げるか」です。主に二つの方向があります。

  1. 縦方向(行を増やす):新しいデータ(行)を下に追加していくイメージ。
  2. 横方向(列を増やす):新しい項目(列)を右側に追加していくイメージ。

この「方向」を意識することが、結合をマスターする一番の近道です。

直感的に縦に積む vstack

まずは vstack(ブイスタック) です。これは vertical stack(垂直に積み上げる)の略です。

名前の通り、配列を縦に「重ねる」のが得意な関数です。例えば、 1 組の出席簿と 2 組の出席簿を縦に繋げて、学年全体のリストを作るような場面で使います。

vstack のルール

重ねるためには、 「横幅(列の数)」が一致していること が絶対条件です。横幅が違うものを無理に積もうとすると、形が崩れてしまうのでエラーになります。

自由度の高い concatenate

次に紹介するのが concatenate(コンカティネート) です。名前が少し長いですが、プログラミングの世界では「連結する」という意味でよく使われる言葉です。

この関数の特徴は、 axis(アクシス) という引数を使って、縦にも横にも結合できる点にあります。

  • $axis \ latex =$ 0 : 縦方向に繋ぐ( vstack と同じ)
  • $axis \ latex =$ 1 : 横方向に繋ぐ( hstack と同じ)

高校生の皆さんに例えるなら、 axis は「接着剤を塗る面」を指定するスイッチのようなものだと考えてください。

結合のメリットと注意点

メリット

  1. バラバラの情報を統合できる:例えば「気温のデータ」と「湿度のデータ」を横に繋げて、一つの分析用データセットを簡単に作れます。
  2. 大量の処理に強い:何百個という小さな配列を、ループを使って一つにまとめることも可能です。

デメリット(注意点)

結合は、実はコンピュータにとって「新しい大きな空き地を探して、そこに全てのデータを引っ越しさせる」という大変な作業です。そのため、巨大な配列を何度も何度も結合すると、動作が重くなってしまうことがあります。

結合関数の使い分けまとめ

関数名得意な方向使いどころ
vstack縦(垂直)データの件数(行)を増やしたいとき
hstack横(水平)データの項目(列)を増やしたいとき
concatenateどちらも可axis を切り替えて、柔軟に繋ぎたいとき

実際にデータを合体させてみよう!

それでは、二つの配列を作って、縦と横に繋ぎ変えてみましょう。

import numpy as np

a = np.array([[1, 2], [3, 4]])

b = np.array([[5, 6], [7, 8]])

縦に積む

v_result = np.vstack((a, b))

print("縦に結合:\n", v_result)

横に並べる

h_result = np.concatenate((a, b), axis=1)

print("横に結合:\n", h_result)

※関数に渡すときは、 (a, b) のようにカッコを二重にして、一つのまとまり(タプル)として渡すのがルールです。ここ、よく忘れてエラーになるポイントなので気を付けてくださいね!

巨大なデータセットを構築するための指針

配列の結合を覚えたことで、皆さんは「小さなデータから大きな構造を作る」建築家のような力を手に入れました!

これからの学習の指針です。

  1. 3つの配列を一度に結合できるか試してみる(実は何個でもいけます!)。
  2. 配列を逆に切り分ける np.split() についても調べて、結合の逆操作を学んでみる。
  3. 表の「見出し」と「データ部分」を結合して、きれいなデータセットを作る練習をしてみる。

バラバラだったパズルが一つに組み上がる瞬間は、プログラミングをしていて最高に気持ちいい瞬間の一つです。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。