情報科学 › 研究のための計算の実務 › NumPy で書く配列計算

ベクトル化は演算の回数を変えず、作業領域を変える

命題 6.1(「NumPy で書く配列計算」§6) ・ ✓公理まで証明済み

XX を n×dn\times d の配列(nn 個の点の座標)とし、全対の距離の 2 乗 Dij=∑k=1d(Xik−Xjk)2D_{ij}=\sum_{k=1}^d(X_{ik}-X_{jk})^2 を次の 3 通りで計算する。

  • (a) 二重ループ: i,ji,j についてのループの中で、k=1,…,dk=1,\ldots,d について差・2 乗・足し込みをスカラーで行う。
  • (b) ブロードキャスト: ((X[:, None, :] - X[None, :, :]) ** 2).sum(axis=2)。
  • (b′) ブロック化: 行を bb 個ずつ(1≤b≤n1\le b\le n)に分け、各ブロック X[s:s+b] について (b) と同じ式を計算する。

このとき、

  1. 3 通りとも、引き算を n2dn^2d 回、乗算を n2dn^2d 回、足し算を n2(d−1)n^2(d-1) 回行う。RAM モデルでの計算時間はどれも Θ(n2d)\Theta(n^2d) である。
  2. 入力と出力 DD のほかに使う作業領域は、(a) が O(1)O(1)、(b) が n2dn^2d 要素の一時配列、(b′) が高々 bndbnd 要素の一時配列である。

本文で読む(証明と前後の説明)→

閉包の状態

✓ 公理まで証明済み

証明が使う定理を 前提 としてたどると、Rikai の中の証明だけで定義・公理(物理では基本仮定)までつながっています(前提の定理類 0 件、定義なども含めて 3 件)。

印の意味: ✓公理まで証明済み ・ △証明あり(閉包未完)・ ※主張のみ。テーマごとの集計は 閉包の状況。

前提をたどる 証明が使う定理・定義(直接 3 件)

▸ を開くと、その項目の証明が使う前提が出ます。深い先は各項目のページでたどれます。

これを使っている定理

証明で明示的に参照している定理は、まだありません。

関連するノック 1 問