Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NumPyとSciPyの使い方 / Python NumPy
Search
kaityo256
PRO
December 06, 2022
Education
1
1.9k
NumPyとSciPyの使い方 / Python NumPy
プログラミング基礎同演習
kaityo256
PRO
December 06, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
デバッグの話 / Debugging for Beginners
kaityo256
PRO
9
1k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
4
280
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
5k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
890
論文の読み方 / How to survey
kaityo256
PRO
220
160k
リンゴゲームと貧富の差 / Origin of the disparity of wealth
kaityo256
PRO
13
14k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
9
8.6k
時間の矢について / Time's arrow
kaityo256
PRO
12
17k
t-SNEをざっくりと理解 / Overview of t-SNE
kaityo256
PRO
2
1.4k
Other Decks in Education
See All in Education
【COPILOT無料セミナー】エンゲージメントと自律性の高いプロジェクト型人材育成に向けて~プロジェクト・ベースド・ラーニング(PBL)という選択肢~
copilot
PRO
0
190
Lisätty todellisuus opetuksessa
matleenalaakso
1
2.3k
LLMs for Social Simulation: Progress, Opportunities and Challenges
wingnus
1
120
ISMS審査準備ブック_サンプル【LRM 情報セキュリティお役立ち資料】
lrm
0
520
BrightonSEO, San Diego, CA 2024
mchowning
0
100
Казармы и гарнизоны
pnuslide
0
140
SQL初級中級_トレーニング【株式会社ニジボックス】
nbkouhou
0
23k
Web Architectures - Lecture 2 - Web Technologies (1019888BNR)
signer
PRO
0
2.7k
Ch2_-_Partie_2.pdf
bernhardsvt
0
110
ルクソールとツタンカーメン
masakamayama
1
1.1k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
2.5k
Sähköiset kyselyt, kokeet ja arviointi
matleenalaakso
1
17k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.1k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
GraphQLとの向き合い方2022年版
quramy
44
13k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
98
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
How to Ace a Technical Interview
jacobian
276
23k
Designing Experiences People Love
moore
138
23k
Gamification - CAS2011
davidbonilla
80
5.1k
Rails Girls Zürich Keynote
gr2m
94
13k
Transcript
1 31 NumPyとSciPyの使い方 プログラミング基礎同演習 慶應義塾大学理工学部物理情報工学科 渡辺
2 31 NumPyとSciPyの使い方
3 31 多次元配列を高速に扱うためのモジュール 配列指向 (Array Oriented Computing) 裏でLAPACKというライブラリを呼んでいる LAPACKはBLASというライブラリ上に構築されている BLAS
(Basic Linear Algebra Subprograms) LAPACK (Linear Algebra PACKage) NumPy (Numeric Python)
4 31 ベクトルや行列同士の演算ルーチンをまとめたもの これがないと数値計算ができない 新しいCPUでは、専用のBLASライブラリが必要(BLAS職人) Level 1 ベクトル同士の演算 = +
Level 2 ベクトルと行列の演算 = x = ・ Level 3 行列と行列の演算 = x Basic Linear Algebra Subprograms
5 31 Linear Algebra PACKage BLASをビルディングブロックとして線形代数の問題を解くパッケージ 連立一次方程式 最小二乗法 固有値問題 特異値問題
https://www.r-ccs.riken.jp/wp-content/uploads/2019/05/nakata190523.pdf 線形代数演算ライブラリBLAS とLAPACKの基礎と実践 (中田真秀) 𝐴𝑥 = 𝑏 min 𝑏 − 𝐴𝑥 𝐴𝑥 = 𝜆𝑥 𝑋 = 𝑈Σ𝑉† 今回の課題
6 31 もともとは線形代数の問題を解くパッケージ (現在はLAPACKが広く使われている) LINPACKは主にベンチマークとして使われている LINPACKベンチマーク ・巨大な連立一次方程式を解くベンチマーク ・Top500というスパコンのランキングに用いられる ・Top500は年に二回開催される LINPACK
7 31 地球シミュレータ 京コンピュータ 富岳 合計 1位 500位
8 31 線形代数はとても大事 NumPy/SciPyがあるからPythonを使うという人がいるくら い、線形代数、行列計算は数値計算においてとても重要 数値計算に限らず、理工系全ての分野に線形代数が現れる 線形代数は真面目に勉強しておきましょう
9 31 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 31 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 31 data = np.arange(8) 連番の一次元配列を作るにはnp.arangeを使う 0 1 2 3
4 5 6 7
12 31 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)
13 31 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
14 31 同じ形(shape)のNumPy配列同士は四則演算ができる 0 1 2 1 1 1 +
= 1 2 3 0 1 2 3 ※ 演算は要素ごとになることに注意 0 1 2 3 x = 0 1 4 9
15 31 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
16 31 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 ※実際には正規化されたベクトルが得られる
17 31 シュレーディンガー方程式の固有値問題 行列の低ランク近似による画像圧縮 𝐴𝑥 = 𝜆𝑥 𝑋 = 𝑈Σ𝑉†
18 31 目標 差分化により、シュレーディンガー方程式が行列の 固有値問題に帰着することを確認 • 固有値が基底状態のエネルギーとして得られる • 基底状態の波動関数が対応する固有ベクトルとし て得られる
19 31 𝑣 ℎ 山の高さを超えられない初速 古典系の場合 山を登りきれずに 100%跳ね返される 量子系の場合 ほとんど跳ね返されるが…
低確率ですり抜ける
20 31 電子をエネルギー障壁で閉じ込める (井戸型ポテンシャル) 電子の存在確率が 障壁の外に少しだけ染み出す −ℏ2 2𝑚 𝑑2 𝑑𝑥2
+ 𝑉 𝑥 𝜓 𝑥 = 𝐸𝜓(𝑥) 電子の存在確率は以下のシュレーディンガー方程式の解として求まる
21 31 −ℏ2 2𝑚 𝑑2 𝑑𝑥2 + 𝑉 𝑥 𝜓
𝑥 = 𝐸𝜓(𝑥) シュレーディンガー方程式 𝜓 𝑥 離散化 𝑣𝑖 連続的な関数 離散的なベクトル
22 31 𝑑2𝜓 𝑑𝑥2 ∼ 𝑣𝑖+1 −2𝑣𝑖 +𝑣𝑖−1 「微分」は「差分」で近似できる −ℏ2
2𝑚 𝑑2 𝑑𝑥2 + 𝑉 𝑥 𝜓 𝑥 = 𝐸𝜓(𝑥) 𝐻 Ԧ 𝑣 = 𝜆 Ԧ 𝑣 離散化 シュレーディンガー方程式 行列の固有値問題 固有値: 電子のエネルギー 固有ベクトル:電子の存在確率
23 31 電子の存在確率が 障壁の外に少し だけ染み出す E 0 -5 閉じ込め効果により 少しエネルギーが
高くなる 井戸型ポテンシャルに閉じ込められた電子が ・障壁の外に少し染み出すこと ・閉じ込めによりエネルギーが少し高くなること を確認する
24 31 目標 モノクロ画像は「行列」とみなすことができる 行列を特異値分解し、低ランク近似により近似行列 を作る
25 31 m行k列の行列と k行n列の行列の積はm行n列になる (3, 4) (4, 5) (3, 5)
X = (3, 4) (4, 5) (3, 5)
26 31 m行k列の行列と k行n列の行列の積はm行n列になる kを小さくとると、大きな行列を細い行列の積で近似できる ≒ x m n m
k k n 要素数mn 要素数mk 要素数kn k << m, n なら mn >> k(m+n)
27 31 𝑋 = 𝑈Σ𝑉† x x = 𝑋 𝑈
𝑉† Σ Σ 特異値(対角行列) Singular Value Decomposition, SVD 𝑈 𝑉† ユニタリ行列(正方行列)
28 31 x x = 𝑋 𝑈 𝑉† Σ 𝑈
Σ x Σ𝑉† = こことここだけ使って再構成 ෨ 𝑋 = x 𝑈 Σ Σ𝑉†
29 31 モノクロ画像は、行列とみなすことができる 25 68 59 12 高さh、幅wのモノクロ画像は各要素0から255のh行w列の行列
30 31 インターネットから 画像をダウンロード 画像をモノクロ化 行列とみなして低ランク近似 近似された画像 ෨ 𝑋 =
x 𝑈 Σ Σ𝑉†
31 31 インターネットから 画像をダウンロード 画像をモノクロ化 行列とみなして低ランク近似 近似された画像 ෨ 𝑋 =
x 𝑈 Σ Σ𝑉†