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
December 06, 2022
Education
1
1.9k
NumPyとSciPyの使い方 / Python NumPy
プログラミング基礎同演習
kaityo256
December 06, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
論文紹介のやり方 / How to review
kaityo256
13
68k
デバッグの話 / Debugging for Beginners
kaityo256
9
1.2k
ビット演算の話 / Let's play with bit operations
kaityo256
5
360
GNU Makeの使い方 / How to use GNU Make
kaityo256
15
5.1k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
3
1k
論文の読み方 / How to survey
kaityo256
219
160k
リンゴゲームと貧富の差 / Origin of the disparity of wealth
kaityo256
14
14k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
9
8.8k
時間の矢について / Time's arrow
kaityo256
12
17k
Other Decks in Education
See All in Education
MySmartSTEAM2425
cbtlibrary
0
120
Flinga
matleenalaakso
2
14k
TP5_-_UV.pdf
bernhardsvt
0
140
Padlet opetuksessa
matleenalaakso
4
13k
あきた地域課題解決インターンMarch2025
toyodome
0
300
OCIでインスタンス構築してみた所感
masakiokuda
0
140
書を持って、自転車で町へ出よう
yuritaco
0
140
Initiatives on Bridging the Gender Gap in the Technology Sector
codeforeveryone
0
120
Security, Privacy and Trust - Lecture 11 - Web Technologies (1019888BNR)
signer
PRO
0
2.7k
Medidas en informática
irocho
0
1.1k
Ch4_-_Cours_1.pdf
bernhardsvt
0
140
1113
cbtlibrary
0
290
Featured
See All Featured
KATA
mclloyd
29
14k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Unsuck your backbone
ammeep
669
57k
The Cult of Friendly URLs
andyhume
78
6.2k
Writing Fast Ruby
sferik
628
61k
Statistics for Hackers
jakevdp
797
220k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
How STYLIGHT went responsive
nonsquared
98
5.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Code Review Best Practice
trishagee
67
18k
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 𝑈 Σ Σ𝑉†