ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
単要素・スライスの更新
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
# 1. 単要素更新
arr[0] = 100
# [100, 2, 3, 4, 5]
# 2. スライス代入 (右辺がスカラ → ブロードキャスト)
arr[1:3] = 0
# [100, 0, 0, 4, 5]
# 3. スライス代入 (右辺が配列)
arr[1:4] = [10, 20, 30]
# [100, 10, 20, 30, 5]
# 4. ステップ付きスライス
arr2 = np.arange(10)
arr2[::2] = -1 # 偶数 index を全部 -1
# [-1, 1, -1, 3, -1, 5, -1, 7, -1, 9]
# 5. 多次元配列
mat = np.zeros((3, 3))
mat[1, 2] = 5
mat[0, :] = [1, 2, 3] # 1 行目を一括
mat[:, 1] = 9 # 2 列目を全部 9
# [[1, 9, 3],
# [0, 9, 5],
# [0, 9, 0]]
Boolean インデックス (条件一括更新)
NumPy 最大の武器。条件式から Boolean 配列を作って一括更新できます:
arr = np.array([1, 5, 3, 7, 2, 8, 4])
# 1. 条件で書き換え
arr[arr > 5] = 0
# [1, 5, 3, 0, 2, 0, 4]
# 2. 条件部分を計算
arr = np.array([1, 5, 3, 7, 2, 8, 4])
arr[arr > 5] = arr[arr > 5] * 10
# [1, 5, 3, 70, 2, 80, 4]
# 3. 複数条件 (& で and、| で or、~ で not。括弧必須)
arr = np.array([1, 5, 3, 7, 2, 8, 4])
arr[(arr > 3) & (arr < 8)] = 0
# [1, 0, 3, 0, 2, 8, 0]
# 4. 多次元
mat = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
mat[mat > 5] = -1
# [[1, 2, 3], [4, 5, -1], [-1, -1, -1]]
np.where: 条件分岐
arr = np.array([1, 5, 3, 7, 2, 8, 4])
# 1. 三項演算子的: cond なら x, でなければ y
result = np.where(arr > 5, 0, arr)
# arr 自体は変わらない (新配列を返す)
# [1, 5, 3, 0, 2, 0, 4]
# 2. 別配列との組合せ
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
result = np.where(a >= 3, b, a)
# [1, 2, 30, 40, 50]
# 3. np.where(cond) は条件を満たす index を返す
arr = np.array([1, 5, 3, 7, 2, 8, 4])
idx = np.where(arr > 5)
# (array([3, 5]),)
arr[idx] = -1
その他の更新系関数
| 関数 | 用途 | 例 |
|---|---|---|
np.put | 1 次元インデックスで複数値代入 | np.put(arr, [0, 2], [99, 88]) |
np.copyto | 条件付き上書き | np.copyto(dst, src, where=mask) |
np.fill_diagonal | 対角成分を一括設定 | np.fill_diagonal(mat, 0) |
arr.fill(x) | 全要素を x に | arr.fill(0) |
np.clip | 範囲外を切り詰め | np.clip(arr, 0, 100) |
arr.flat[i] | 1 次元インデックスで多次元アクセス | mat.flat[5] = 99 |
# np.put
arr = np.arange(10)
np.put(arr, [0, 2, 4], [99, 88, 77])
# [99, 1, 88, 3, 77, 5, 6, 7, 8, 9]
# np.copyto + where (条件付き上書き)
dst = np.zeros(5)
src = np.array([1, 2, 3, 4, 5])
mask = np.array([True, False, True, False, True])
np.copyto(dst, src, where=mask)
# [1, 0, 3, 0, 5]
# np.fill_diagonal
mat = np.ones((3, 3))
np.fill_diagonal(mat, 0)
# [[0, 1, 1], [1, 0, 1], [1, 1, 0]]
# np.clip (min/max でクリップ)
arr = np.array([-3, -1, 5, 12, 100])
np.clip(arr, 0, 10)
# [0, 0, 5, 10, 10]
# flat: 多次元を 1 次元のように扱う
mat = np.arange(12).reshape(3, 4)
mat.flat[5] = 99
# [[0, 1, 2, 3], [4, 99, 6, 7], [8, 9, 10, 11]]
View と Copy の重要な違い
NumPy のスライスはView (参照) を返します。View を通じて更新すると元配列も変わる:
# View (元と連動)
arr = np.array([1, 2, 3, 4, 5])
sub = arr[1:4] # View
sub[0] = 99
print(arr) # [1, 99, 3, 4, 5] ← 元も変わる!
# Copy (独立)
arr = np.array([1, 2, 3, 4, 5])
sub = arr[1:4].copy()
sub[0] = 99
print(arr) # [1, 2, 3, 4, 5] ← 元は変わらない
# Boolean インデックスは Copy
arr = np.array([1, 2, 3, 4, 5])
sub = arr[arr > 2]
sub[0] = 99
print(arr) # [1, 2, 3, 4, 5] ← 元は変わらない
# Fancy インデックスも Copy
arr = np.array([1, 2, 3, 4, 5])
sub = arr[[0, 2, 4]]
sub[0] = 99
print(arr) # [1, 2, 3, 4, 5]
# View かどうか確認
print(sub.base is arr) # True なら View
in-place vs 新配列 (メモリ効率)
# in-place (メモリ効率良)
arr = np.arange(1000000)
arr += 1 # ← 既存メモリを書き換え
arr *= 2
# 新配列 (元残るがメモリ 2 倍消費)
arr = np.arange(1000000)
arr = arr + 1 # ← 新配列を作成して再代入
arr = arr * 2
# 巨大配列なら in-place が必須
# in-place 系の関数: np.add(a, b, out=a) など out= で指定可能
np.add(arr, 1, out=arr)
np.multiply(arr, 2, out=arr)
# 関数では out= 引数で結果書込先を指定
result = np.empty_like(arr)
np.sqrt(arr, out=result)
多次元での更新パターン
# 画像処理風: RGB のうち R チャンネルだけ更新
img = np.zeros((100, 100, 3), dtype=np.uint8)
img[:, :, 0] = 255 # R チャンネルを最大
# 矩形領域を一括塗りつぶし
img[20:50, 30:70, :] = [255, 0, 0] # 赤い長方形
# 円形マスクで更新
y, x = np.ogrid[:100, :100]
mask = (x - 50)**2 + (y - 50)**2 <= 30**2
img[mask] = [0, 255, 0] # 緑の円
# 行/列の挿入 (要 reshape)
mat = np.arange(9).reshape(3, 3)
# 1 行追加 → np.vstack
mat = np.vstack([mat, [10, 11, 12]])
# 1 列追加 → np.hstack
mat = np.hstack([mat, [[20], [21], [22], [23]]])
FAQ
Q: arr[arr > 5] = 0 はなぜ in-place?
A: Boolean インデックスでの代入 (left-hand side) は元配列を直接書き換えます。右辺 (取得) の Boolean インデックスは Copy を返します。
Q: スライスでの代入が元配列を変えないようにしたい
A: arr[1:4].copy() で明示的にコピー。または最初から copy で作る。
Q: np.where と Boolean インデックス、どちらを使う?
A: 「新配列が欲しい」なら np.where、「元配列を更新」なら Boolean インデックス代入。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 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
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- ファイアウォールとは|パケットフィルタ・ステートフル・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
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 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
コメントを削除してもよろしいでしょうか?