ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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 と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?