情報科学 › 研究のための計算の実務 › NumPy で書く配列計算
重なりのある更新
命題 4.2(「NumPy で書く配列計算」§4) ・ ✓公理まで証明済み
メモリを、番地から値への写像 μ とみる(1 要素を 1 つの番地で代表させる)。有限集合 J の各 j に、出力の番地 ω(j)、入力の番地 ρ1(j),…,ρm(j) が定まっていて、ω は単射とする。関数 f による更新の 2 通りの実行を考える。
- 一時配列を使う実行: すべての j について τj=f(μ(ρ1(j)),…,μ(ρm(j))) を先に計算し、そのあとで μ(ω(j)) を τj に書き換える。
- 逐次実行: J の元をある順序 j1,j2,… に並べ、順に「その時点のメモリから ρ1(jt),…,ρm(jt) を読み、f の値を ω(jt) に書く」を行う。
このとき次が成り立つ。
- j=j′ ならばすべての l で ω(j)=ρl(j′) である(ある要素の出力先を、別の要素の計算が読まない)とき、逐次実行の結果は順序によらず、一時配列を使う実行の結果と一致する。とくに、出力の番地の集合と入力の番地の集合が交わらないとき、および出力と入力がまったく同じ配置(ω(j)=ρ1(j) で、ほかに重なりがない)のときにそうである。
- 長さ n≥3 の配列 a に対する
a[1:] += a[:-1](J={1,…,n−1}, ω(j)=ρ1(j)=j, ρ2(j)=j−1, f(x,y)=x+y)は 1 の条件を満たさない。一時配列を使う実行の結果は aj′=aj+aj−1、添字の小さい順の逐次実行の結果は aj′=a0+a1+⋯+aj(累積和)で、a0=0 ならば j=2 で異なる。
本文で読む(証明と前後の説明)→
閉包の状態
✓ 公理まで証明済み
証明が使う定理を 前提 としてたどると、Rikai の中の証明だけで定義・公理(物理では基本仮定)までつながっています。
印の意味: ✓公理まで証明済み ・ △証明あり(閉包未完)・ ※主張のみ。テーマごとの集計は 閉包の状況。
前提をたどる 証明が使う定理・定義
証明は Rikai の他の定理を参照していません(定義と論理だけで示されています)。
これを使っている定理
証明で明示的に参照している定理は、まだありません。
関連するノック 1 問