ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
結論: よく使う 4 つのパターン
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 1. 縦方向 (行を増やす)
np.vstack([a, b])
# [[1, 2],
# [3, 4],
# [5, 6],
# [7, 8]]
# 2. 横方向 (列を増やす)
np.hstack([a, b])
# [[1, 2, 5, 6],
# [3, 4, 7, 8]]
# 3. 汎用 (axis 指定)
np.concatenate([a, b], axis=0) # = vstack
np.concatenate([a, b], axis=1) # = hstack
# 4. 新しい軸を追加
np.stack([a, b]) # shape: (2, 2, 2)
np.concatenate
最も汎用的な関数。複数配列を既存の軸方向に連結します。
np.concatenate(arrays, axis=0, out=None, dtype=None, casting='same_kind')
# 1D
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.concatenate([a, b]) # [1, 2, 3, 4, 5, 6]
# 2D, axis=0 (行方向)
A = np.array([[1, 2], [3, 4]]) # (2, 2)
B = np.array([[5, 6]]) # (1, 2)
np.concatenate([A, B], axis=0)
# [[1, 2],
# [3, 4],
# [5, 6]] shape: (3, 2)
# 2D, axis=1 (列方向)
A = np.array([[1, 2], [3, 4]]) # (2, 2)
C = np.array([[5], [6]]) # (2, 1)
np.concatenate([A, C], axis=1)
# [[1, 2, 5],
# [3, 4, 6]] shape: (2, 3)
np.vstack / np.hstack / np.dstack
| 関数 | axis | 1D 入力時 | 用途 |
|---|---|---|---|
np.vstack | 0 | (N,) → (1, N) に拡張して縦積み | 行追加 |
np.hstack | 1 (1D は 0) | (N,) のまま連結 | 列追加 / 1D 連結 |
np.dstack | 2 | (N,) → (1, N, 1) | RGB チャネルを重ねる |
# 1D を縦積み
np.vstack([np.arange(3), np.arange(3, 6)])
# [[0, 1, 2],
# [3, 4, 5]] shape: (2, 3)
# 1D を横結合
np.hstack([np.arange(3), np.arange(3, 6)])
# [0, 1, 2, 3, 4, 5] shape: (6,)
# 画像チャネル合成 (R, G, B → RGB)
R = np.zeros((100, 100))
G = np.zeros((100, 100))
B = np.zeros((100, 100))
rgb = np.dstack([R, G, B]) # shape: (100, 100, 3)
np.stack: 新しい軸を追加
concatenate は既存の軸方向につなぐのに対し、stack は新しい軸を作って配列を「重ねる」イメージ。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.concatenate([a, b])
# [1, 2, 3, 4, 5, 6] shape: (6,)
np.stack([a, b])
# [[1, 2, 3],
# [4, 5, 6]] shape: (2, 3) ← 新しい先頭軸
np.stack([a, b], axis=1)
# [[1, 4],
# [2, 5],
# [3, 6]] shape: (3, 2)
np.append
1 要素や別の配列を末尾に追加。内部で concatenate を呼ぶラッパーであり、毎回コピーが発生するためループでの追加には不向きです。
a = np.array([1, 2, 3])
np.append(a, [4, 5]) # [1, 2, 3, 4, 5]
# 2D
A = np.array([[1, 2], [3, 4]])
np.append(A, [[5, 6]], axis=0)
# [[1, 2],
# [3, 4],
# [5, 6]]
# ❌ ループで append は遅い (O(N^2) のメモリコピー)
arr = np.array([])
for i in range(10000):
arr = np.append(arr, i) # 巨大データではダメ
# ✅ Python list で集めて最後に np.array へ
buf = []
for i in range(10000):
buf.append(i)
arr = np.array(buf)
np.r_[ ] と np.c_[ ]
角括弧での結合を提供するインデックス風ヘルパー。スクリプトを短く書くのに便利:
# 1D 連結
np.r_[1:4, [10, 20], 0]
# [1, 2, 3, 10, 20, 0]
# 2D 縦結合 (= vstack)
np.r_[[[1, 2]], [[3, 4]]]
# 2D 横結合 (= hstack)
np.c_[[1, 2, 3], [4, 5, 6]]
# [[1, 4],
# [2, 5],
# [3, 6]]
# 行ベクトル化
np.c_[1, 2, 3]
# [[1, 2, 3]]
形状要件
concatenate / vstack / hstack で連結するには、結合軸以外の次元がすべて一致している必要があります:
A = np.zeros((3, 4)) # shape (3, 4)
B = np.zeros((2, 4)) # shape (2, 4) → axis=0 OK
C = np.zeros((3, 5)) # shape (3, 5) → axis=0 NG, axis=1 OK
D = np.zeros((3, 4, 2)) # 次元数違い → エラー
np.concatenate([A, B], axis=0) # OK → (5, 4)
np.concatenate([A, C], axis=0) # ValueError
np.concatenate([A, C], axis=1) # OK → (3, 9)
np.concatenate([A, D], axis=0) # ValueError (次元数不一致)
性能とメモリ
結合は新しいメモリ領域に全要素をコピーします。ループで毎回 concatenate するのは O(N^2) コピーになり大変遅いので、以下のいずれかを推奨:
- Python list に append → 最後に
np.array(list)で変換 - 事前に最大サイズの配列を確保 (
np.empty) → スライスで埋める np.concatenateを 1 回だけ呼ぶ (リスト of 配列を渡す)
# ❌ 遅い
result = np.array([])
for chunk in chunks:
result = np.concatenate([result, chunk])
# ✅ 一括結合
result = np.concatenate(chunks)
# ✅ pre-allocate
total = sum(c.shape[0] for c in chunks)
result = np.empty(total, dtype=chunks[0].dtype)
i = 0
for c in chunks:
result[i:i+c.size] = c
i += c.size
pandas concat との比較
| 項目 | NumPy concatenate | pandas concat |
|---|---|---|
| 対象 | ndarray | DataFrame / Series |
| 軸指定 | axis=0/1/... | axis=0/1 |
| インデックス | なし | あり (再構築可) |
| 列名のアライン | 不要 (位置) | 列名一致でアライン |
| 速度 | 速い (C 実装) | NumPy 結合 + ラベル管理 |
FAQ
Q: 1D 配列を縦に積みたい
A: np.vstack([a, b]) で OK。または np.stack([a, b])。
Q: 結合先のメモリを再利用したい (in-place)
A: NumPy には in-place concatenate はありません。事前に大きい配列を確保しスライス代入が代替。
Q: 文字列配列を結合できますか
A: できます。np.concatenate([['a','b'], ['c','d']])。dtype は配列ごとに固定なので、サイズが大きいものに合わせて昇格します。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- NetBeansでTomcatを起動する手順|サーバ登録・ポート・トラブル対処 2026-09-07 07:45:13
- Laravel 記事一覧55件|環境構築・ルーティング・DB・エラー対処 2026-09-07 07:45:13
- Spring Framework 記事一覧31件|DI・設定・例外の対処 2026-09-07 07:45:13
- Javaの定数 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- hostnameコマンドの使い方|Windows・Linux・macOSでホスト名確認 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Oracle DROP USERでユーザー削除|CASCADE・接続中ユーザーの対処 2026-09-07 07:45:13
- SQLとは|DDL・DMLとリレーショナルデータベース操作の基本 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?