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
920
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
4
240
GNU Makeの使い方 / How to use GNU Make
kaityo256
PRO
15
4.9k
制限ボルツマンマシンの話 / Introduction of RBM
kaityo256
PRO
3
830
論文の読み方 / How to survey
kaityo256
PRO
220
160k
リンゴゲームと貧富の差 / Origin of the disparity of wealth
kaityo256
PRO
14
14k
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
9
8.5k
時間の矢について / Time's arrow
kaityo256
PRO
12
17k
t-SNEをざっくりと理解 / Overview of t-SNE
kaityo256
PRO
2
1.3k
Other Decks in Education
See All in Education
Comment aborder et contribuer sereinement à un projet open source ? (Masterclass Université Toulouse III)
pylapp
0
3.2k
Adobe Express
matleenalaakso
1
7.5k
Library Prefects 2024-2025
cbtlibrary
0
110
Kaggle 班ができるまで
abap34
1
190
謙虚なアジャイルコーチ__アダプティブ_ムーブ_による伴走支援.pdf
antmiyabin
0
270
Web Application Frameworks - Lecture 4 - Web Technologies (1019888BNR)
signer
PRO
0
2.6k
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
14k
HCI Research Methods - Lecture 7 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
710
Medidas en informática
irocho
0
290
世界のオープンソースロボットたち #1
shiba_8ro
0
140
情報処理工学問題集 /infoeng_practices
kfujita
0
120
Design Guidelines and Models - Lecture 5 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
680
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1366
200k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Making the Leap to Tech Lead
cromwellryan
133
8.9k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Optimizing for Happiness
mojombo
376
70k
GitHub's CSS Performance
jonrohan
1030
460k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
89
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
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 𝑈 Σ Σ𝑉†