【極めればこのテンソル操作 】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

主要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 コンサルティング
Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

Windows版 Claude Code を irm でインストールして「claude is not recognized」を直すまで

こんにちは! 公式PowerShellインストーラー(irm https://claude.ai/install.ps1 | iex)で Claude Code を入れたのに、claude --version を叩くと「The term 'claude' is not recognized as a name of a cmdlet...」と怒られるときがあります これは Anthropic 公式 GitHub にも報告されている 既知のバグで、インストーラーが PATH の追加を忘れています。実際にインストール作業をやって詰まったので、最短の解決手順をまとめます。 環境 * Windows 11 * PowerShell 7.x(コードは PowerShell

By Qualiteg プロダクト開発部
Claude Opus 4.7 完全ガイド — 公式情報で読み解くモデル仕様とClaude Codeでの実践ノウハウ

Claude Opus 4.7 完全ガイド — 公式情報で読み解くモデル仕様とClaude Codeでの実践ノウハウ

こんにちは! Qualitegプロダクト開発部です! 2026年4月に、AnthropicからClaude Opus 4.7がリリースされました。 今回のアップデートは、単にベンチマークが上がったという話ではありません。命令の解釈の仕方、応答長、ツール呼び出しの頻度、subagentの起動方針まで、モデルの振る舞いそのものが変わっています。 それに伴い、4.6までに作り込んだプロンプトや設定の一部は、外したり再評価したりする必要があります。本記事では、そうした移行時の落とし穴と、4.7時代に合わせた運用作法を、できるだけ実践的にまとめました。 この記事では、まずOpus 4.7で何が変わったのかを確認し、そのうえでClaude Code CLI版とClaude Code Web版でどう使いこなすべきかを見ていきます。 (通常のclaude.aiチャットUIは対象外です。) なお、けっこう長めの記事になっているので、 頭から通読していただく必要はありません。 下の目次から、気になるところや今すぐ困っているところだけ拾い読みしていただいて大丈夫です。 たとえば「とりあえず4.

By Qualiteg プロダクト開発部