【極めればこのテンソル操作 】NumPy配列の縦マージ方法:5つのアプローチ

【極めればこのテンソル操作 】NumPy配列の縦マージ方法:5つのアプローチ
Photo by Iva Rajović / Unsplash

こんにちは!

今日は、NumPyにおける配列の縦マージについてご説明いたします!

ご存じの通りNumPyは、Pythonで科学的計算を行うための強力なライブラリです。

複数のNumPy配列を縦にマージして大きな配列を作成する方法について、5つの異なるアプローチを詳しく見ていきましょう。

具体的には、(N,128)と(M,128)の形状を持つ複数のNumPy配列が格納されたPythonのリストから、(N+M,128)の形状を持つ単一のNumPy配列を作成する方法を説明します。

1. np.vstack() を使用する方法

np.vstack() 関数は、垂直方向(行方向)に配列をスタックするための関数です。

import numpy as np

list_of_arrays = [
    np.random.rand(3, 128),
    np.random.rand(2, 128)
]

merged_array = np.vstack(list_of_arrays)
print(merged_array.shape)  # (5, 128)

特徴

  • v(vertical縦に)にstack(積む)ということでメソッド名がとてもシンプルで直感的ですね。

使用場面

  • 複数の2次元配列を縦に結合する一般的なケース
  • メモリ効率と速度が重要な場合

2. np.concatenate() を使用する方法

np.concatenate() 関数も配列同士のマージでよく登場します。vstackよりももっと汎用性が高く指定した軸(axis)に沿って配列を結合します。

この関数の重要なパラメータの1つが axis です。

ただ、「軸ってなにさ?」と最初は戸惑うかもしれません、ので、少し軸についてもこまかくみていきましょう。

import numpy as np

list_of_arrays = [
    np.random.rand(3, 128),
    np.random.rand(2, 128)
]

merged_array = np.concatenate(list_of_arrays, axis=0)
print(merged_array.shape)  # (5, 128)

axis=0 の詳細な説明

NumPyにおいて、axisは配列の次元を指定するパラメータです。

たとえば2次元配列の場合は

  • axis=0 は最初の次元(行)に沿って操作を行います。
  • axis=1 は2番目の次元(列)に沿って操作を行います。

たとえばaxis=0 を指定すると、以下のような動作になります:

  1. 配列を「縦方向」に結合します。
  2. 最初の次元(行数)が増加します。
  3. 2番目の次元(列数)は変わりません。

視覚的に表すと次のようになります:

Array1 (3x128):  [ ][ ][ ]    
                 [ ][ ][ ]    
                 [ ][ ][ ]    

Array2 (2x128):  [ ][ ][ ]
                 [ ][ ][ ]

Merged (5x128):  [ ][ ][ ]    (Array1)
                 [ ][ ][ ]    
                 [ ][ ][ ]    
                 [ ][ ][ ]    (Array2)
                 [ ][ ][ ]

axis=1 との比較

対照的に、axis=1 を使用すると

  1. 配列を「横方向」に結合します。
  2. 最初の次元(行数)は変わりません。
  3. 2番目の次元(列数)が増加します。
# 注意:この例では、入力配列の形状を変更しています
array1 = np.random.rand(3, 64)
array2 = np.random.rand(3, 64)
merged_horizontal = np.concatenate([array1, array2], axis=1)
print(merged_horizontal.shape)  # (3, 128)

視覚的には:

Array1 (3x64):  [ ][ ][ ]
                [ ][ ][ ]
                [ ][ ][ ]

Array2 (3x64):  [ ][ ][ ]
                [ ][ ][ ]
                [ ][ ][ ]

Merged (3x128): [ ][ ][ ][ ][ ][ ]
                [ ][ ][ ][ ][ ][ ]
                [ ][ ][ ][ ][ ][ ]

使用上の注意点

  • axis=0 を使用する場合、結合する配列の列数(2番目の次元)が同じである必要があります。
  • axis を指定しない場合、デフォルトで axis=0 が使用されます。
  • 3次元以上の配列の場合、axis の値とその効果はより複雑になります。

特徴

  • 柔軟性が高い(軸を指定可能)のが特徴ですね。axisの指定により3次元以上まで拡張できます。

使用場面

  • 結合する軸を動的に変更したい場合
  • 複数の次元で結合操作を行う必要がある場合
  • データの構造や処理の要件に応じて柔軟に対応したい場合

(おまけ) 3. リスト内包表記と np.row_stack() を使用する方法

np.row_stack()np.vstack() のエイリアスですが、リスト内包表記と組み合わせることで、より表現力の高いコードを書くことができます。

import numpy as np

list_of_arrays = [
    np.random.rand(3, 128),
    np.random.rand(2, 128)
]

merged_array = np.row_stack([arr for arr in list_of_arrays])
print(merged_array.shape)  # (5, 128)

特徴

  • Pythonic な書き方をめざしたい人向け。

使用場面

  • 結合前に配列に対して操作を行いたい場合。

(おまけ) 4. np.r_ を使用する方法

np.r_ は、配列を行方向に結合するための簡潔な構文を提供します。

import numpy as np

list_of_arrays = [
    np.random.rand(3, 128),
    np.random.rand(2, 128)
]

merged_array = np.r_[tuple(list_of_arrays)]
print(merged_array.shape)  # (5, 128)

特徴

  • 非常に簡潔な構文ですが、可読性の点でわざわざこの書き方をしなくてもよいきもします。

使用場面

  • どうしてもこの書き方がかっこいいとおもうとき。

(おまけ) 5. ループを使用して手動で結合する方法

この方法は、結合プロセスを完全に制御したい場合に有用です。

import numpy as np

list_of_arrays = [
    np.random.rand(3, 128),
    np.random.rand(2, 128)
]

total_rows = sum(arr.shape[0] for arr in list_of_arrays)
merged_array = np.zeros((total_rows, 128))

current_row = 0
for arr in list_of_arrays:
    n_rows = arr.shape[0]
    merged_array[current_row:current_row+n_rows] = arr
    current_row += n_rows

print(merged_array.shape)  # (5, 128)

まとめ

おまけも含めて5つご紹介いたしましたが、一般的には、np.vstack()np.concatenate() が最も効率的かつ頻出かとおもいます。

それでは、また次回お会いしましょう!

Read more

Mythos(ミュトス)レベルのオープンモデルはいつ出るのか

Mythos(ミュトス)レベルのオープンモデルはいつ出るのか

こんにちは! 本日は、ここ最近のAI業界で一番ざわついている話題、「Claude Mythos(ミュトス)」とその周辺について書きます。 発表から1ヶ月半が経って、ホワイトハウスの反対、日本のメガバンクの動き、AISIの追加評価、Anthropicの方針転換と、状況がかなり動いてきました。ここで一度、「で、結局オープンソースで同じものが使えるようになるのはいつなの?」という素朴な問いに、数字で答えてみます。 2026年4月7日、AnthropicはClaude Mythos Previewを発表しました。 サイバーセキュリティ能力で人類トップ層に到達したとされる、フロンティアモデルです。 Anthropicは"gated research preview"として、Project Glasswingのローンチパートナー(AWS、Apple、Cisco、CrowdStrike、Google、JPMorganChase、Microsoft、NVIDIAなど)に加え、重要ソフトウェアインフラを担う40超の追加組織に限定して提供しており、一般公開はしていません(Anthropic公式)

By Qualiteg 研究部, Qualiteg コンサルティング
AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

AIエージェントを"事業に載せる"ために【第3回】AI導入を止めないために、実務で先に設計すべきこと

— AI導入を"事業に載せる"ために、いま設計すべきこと(全3回) こんにちは!Qualitegコンサルティングチームです。 今回の「AI導入を“事業に載せる”ために、いま設計すべきこと」シリーズも、いよいよ第3回です。 第1回では、実際のAI導入事故を通じて、AIエージェントのリスクが単なる技術不良ではなく、権限や運用設計の不在から生まれることを見てきました。第2回では、事故が起きたときに責任をどこに置くのか、法務・契約・組織の観点から責任分解の難しさを整理しました。 では、AI導入を止めずに前に進めるためには、実務として何を先に設計しておくべきなのでしょうか。 本記事では、品質保証の転換、人間レビューの限界、海外で進む保険市場の変化も踏まえながら、AIエージェント導入前に設計すべき5つの領域と、経営として先に答えるべき3つの問いを整理します。 1. 品質保証の転換:「AIは自信を持って間違える」を前提にする 従来のソフトウェアの品質保証は、少なくとも同じ入力に対して同じ結果を期待しやすく、仕様・テスト・再現性を軸に品質を確認する考え方に立っていました。 ISACA

By Qualiteg コンサルティング
主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

主要LLMプロバイダーのAPI料金表 — Claude / GPT / Gemini/Grok 【2026年5月13日時点】

こんにちは、 今回は、主要LLMプロバイダー( Claude / GPT /Gemini/Grok)のAPI料金表  をまとめてみました。(2026年5月13日時点) プロバイダ別 料金一覧 まずは各社の現行ラインナップを縦に並べた一覧をご紹介します。価格はすべて per 1M tokens、円表記は 1ドル=160円換算です。 Anthropic(Claude) モデル Status Context Input Output Cached Input Claude Opus 4.7 Fast Mode Beta(Opus専用) 1M $30.00<br>(¥4,800) $150.00<br>

By Qualiteg プロダクト開発部
コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

コーディングエージェントの現状と未来への展望 【第3回】"書くAI"から"指揮するAI"へ──2026年の開発現場で起きている変化

こんにちは! コーディングエージェントシリーズ、ついに最終回です! 2026年に入り、Claude Code、Cursor 3、GitHub Copilot Coding Agentはいずれも、単なるコード補完やチャット型支援を超え、複数エージェントを使った開発ワークフローへ進化しつつあります。本稿では、AIコーディングエージェントの最新動向を、Claude CodeのAuto Memory / Subagents、Cursor 3のAgents Window、GitHub CopilotのCoding Agent、そしてSWE-benchの読み方まで含めて整理します。 第1回では、2025年12月時点で百花繚乱状態にあったAIコーディングエージェントの全体像を俯瞰し、商用からOSSまで20以上のツールを「CLIベース」「IDE統合型」「AI特化IDE型」「自律型」の4つのカテゴリに整理しました。 第2回では、Claude Code・Codex CLI・Aiderを詳細比較したうえで、現在のコーディングエージェントが共通して抱える構造的課題——コンテキストウィンドウの限界、セッ

By Qualiteg コンサルティング