NumPyとSciPyの使い方 / Python 09

A10e41b0a61d59f2258d7f6172c33479?s=47 kaityo256
December 03, 2019

NumPyとSciPyの使い方 / Python 09

プログラミング基礎同演習09

A10e41b0a61d59f2258d7f6172c33479?s=128

kaityo256

December 03, 2019
Tweet

Transcript

  1. 2.

    2 for i in [(0, 0), (1, 0), (0, 1),

    (1, 1)]: print(i) (0, 0) (1, 0) (0, 1) (1, 1) 「タプルのリスト」に対してループを回し、表示するプログラム
  2. 3.

    3 for i in [(0, 0), (1, 0), (0, 1)

    (1, 1)]: print(i) 間違っているコード エラーメッセージ ----> 1 for i in [(0,0), (1,0), (0,1) (1,1)]: 2 print(i) TypeError: 'tuple' object is not callable 「タプルは関数呼び出しできないよ」 (0, 1) (1, 1) タプルの関数呼び出し と解釈された func (1, 1) 関数の 呼び出し と同様に カンマ忘れ
  3. 4.

    4 for i in [(0,0), (1,0), (0,1), (1,1)]: a, b

    = i print(a,b) タプルの要素を変数にバラすプログラム 0 0 1 0 0 1 1 1
  4. 5.

    5 for i in [(0,0), (1,0), (0,1), (1,1)]: a, b

    = 1 print(a,b) 間違っているコード 1 for i in [(0,0), (1,0), (0,1), (1,1)]: ----> 2 a, b = 1 3 print(a,b) TypeError: 'int' object is not iterable エラーメッセージ 「整数(int)は反復可能(iterable)じゃないよ」 「i」と「1」を間違えている 整数1(要素一つしかない)を、二つに分けようとしてエラー a, b = 1 a, b = (0,1)
  5. 7.

    7 def prune(node): if max(node.s) == 0: return True if

    node.is_first: for n in node.siblings: if prune(n): return True return False if not node.is_first: sib = node.siblings.copy() for n in sib: if prune(n): node.siblings.remove(n) if not node.siblings: return True return False 枝刈り関数prune 先手番の処理 後手番の処理 先手の勝ち筋があればTrue、そうでなければFalseを返す関数
  6. 8.

    8 先手番 後手番 後手の負け 自分の子ノード全てに対して、pruneを 再帰的に呼びだす 一つでもTrueを返したらTrueを返す True 先手番 後手番

    False 後手番 最後まで探しても 先手番の勝ちがない どこかに 先手の勝ちがある if node.is_first: for n in node.siblings: if prune(n): return True return False 先手の勝ちにつながる手があればTrue それ以外ならFalse
  7. 9.

    9 for n in sib: if prune(n): node.siblings.remove(n) 先手番 後手番

    後手番 後手の負け × 自分の子ノード(いま打てる手)を全て調べ、 負けにつながる手があったら枝刈り(remove)
  8. 10.

    10 if not node.siblings: return True 先手番 後手番 後手番 ×

    ×× 枝刈りの結果、子ノードがなくなった =打つ手がなくなった その状態になったら必敗なのでTrueを返す ※:必敗:先手が最善手を指したら後手が必ず負ける状態
  9. 18.

    18 import numpy as np まずNumPyをインポート np.arrayにPythonのリストを渡すとNumPy配列になる data = np.array([1,2,3])

    data 1 2 3 A Visual Intro to NumPy and Data Representation (https://jalammar.github.io/visual-numpy/) np.array([[1,2],[3,4]]) data 1 2 3 4
  10. 19.

    19 A Visual Intro to NumPy and Data Representation (https://jalammar.github.io/visual-numpy/)

    np.zeros(3) 0 0 0 0 0 0 0 np.zeros((2,2)) np.ones(3) 1 1 1 1 1 1 1 np.ones((2,2)) np.zerosで要素が全てゼロ、np.onesで要素が全て1の NumPy配列を作ることができる 「形」はタプルで指定
  11. 21.

    21 NumPy配列は、メモリ上では一次元配列として格納 np.array([[1,2],[3,4]]) data 1 2 3 4 メモリ 1

    2 3 4 data (2,2) NumPy配列の「形」は、shapeで得ることができる data.shape #=> (2,2)
  12. 22.

    22 a = np.arange(8) 0 1 2 3 4 5

    6 7 b = a.reshape((2,4)) 0 1 2 3 4 5 6 7 c = a.reshape((2,2,2)) 4 5 6 7 0 1 2 3 2 4
  13. 23.

    23 同じ形(shape)のNumPy配列同士は四則演算ができる 0 1 2 1 1 1 + =

    1 2 3 0 1 2 3 ※ 演算は要素ごとになることに注意 0 1 2 3 x = 0 1 4 9
  14. 24.

    24 NumPy配列にスカラー量を演算できる 0 1 2 1 + = 1 2

    3 0 1 2 1 + = 1 1 0 1 2 2 x = 0 2 4 0 1 2 2 x = 2 2
  15. 25.

    25 from scipy import linalg import numpy as np まずはインポートする

    linalg.eighでエルミート行列の固有値、固有ベクトルを求める a = np.array([[1,2],[2,1]]) w, v = linalg.eigh(a) 1 2 2 1 a w 3 -1 行列 固有値 1 -1 v固有ベクトル (※) 1 1 ※実際には正規化されたベクトルが得られる
  16. 28.

    28 電子をエネルギー障壁で閉じ込める (井戸型ポテンシャル) 電子の存在確率が 障壁の外に少しだけ染み出す −ℏ# 2% &# &'# +

    ) ' * ' = ,*(') 電子の存在確率は以下のシュレーディンガー方程式の解として求まる
  17. 29.

    29 −ℏ# 2% &# &'# + ) ' * '

    = ,*(') シュレーディンガー方程式 * ' 離散化 /0 連続的な関数 離散的なベクトル
  18. 30.

    30 !"# !$" ∼ &'() −2&' +&'-) 「微分」は「差分」で近似できる −ℏ" 2/

    !" !$" + 0 $ # $ = 2#($) 5 ⃗ & = 7 ⃗ & 離散化 シュレーディンガー方程式 行列の固有値問題 固有値: 電子のエネルギー 固有ベクトル:電子の存在確率
  19. 31.

    31 電子の存在確率が 障壁の外に少し だけ染み出す E 0 -5 閉じ込め効果により 少しエネルギーが 高くなる

    井戸型ポテンシャルに閉じ込められた電子が ・障壁の外に少し染み出すこと ・閉じ込めによりエネルギーが少し高くなること を確認する
  20. 34.

    34 ! = #Σ%& x x = ! # %&

    Σ Σ 特異値(対角行列) Singular Value Decomposition, SVD # %& ユニタリ行列(正方行列)
  21. 35.

    35 x x = ! " #$ Σ " Σ

    x Σ#$ = & ! = x " Σ Σ#$ こことここだけ使って再構成
  22. 37.

    37 インターネットから 画像をダウンロード 画像をモノクロ化 ! " = x # Σ

    Σ%& 行列とみなして低ランク近似 近似された画像
  23. 38.

    38 インターネットから 画像をダウンロード 画像をモノクロ化 ! " = x # Σ

    Σ%& 行列とみなして低ランク近似 近似された画像