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
2.3k
NumPyとSciPyの使い方 / Python NumPy
プログラミング基礎同演習
kaityo256
PRO
December 06, 2022
Tweet
Share
More Decks by kaityo256
See All by kaityo256
渡辺研Slackの使い方 / Slack Local Rule
kaityo256
PRO
10
11k
卒論の書き方 / Happy Writing
kaityo256
PRO
54
28k
生成AIとの付き合い方 / Generative AI and us
kaityo256
PRO
13
7k
モンテカルロ法(3) 発展的アルゴリズム / Simulation 04
kaityo256
PRO
10
1.7k
UMAPをざっくりと理解 / Overview of UMAP
kaityo256
PRO
12
4.3k
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
7
770
論文紹介のやり方 / How to review
kaityo256
PRO
18
90k
デバッグの話 / Debugging for Beginners
kaityo256
PRO
18
1.9k
ビット演算の話 / Let's play with bit operations
kaityo256
PRO
8
730
Other Decks in Education
See All in Education
沖ハック~のみぞうさんとハッキングチャレンジ☆~
nomizone
1
570
160人の中高生にAI・技術体験の講師をしてみた話
shuntatoda
0
300
2025年度伊藤正彦ゼミ紹介
imash
0
170
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
The browser strikes back
jonoalderson
0
360
ロータリー国際大会について~国際大会に参加しよう~:古賀 真由美 会員(2720 Japan O.K. ロータリーEクラブ・(有)誠邦産業 取締役)
2720japanoke
1
770
Surviving the surfaceless web
jonoalderson
0
350
【洋書和訳:さよならを待つふたりのために】第2章 ガン特典と実存的フリースロー
yaginumatti
0
220
JavaScript - Lecture 6 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Going over the Edge
jonoalderson
0
340
Introdución ás redes
irocho
0
530
令和エンジニアの学習法 〜 生成AIを使って挫折を回避する 〜
moriga_yuduru
0
230
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Statistics for Hackers
jakevdp
799
230k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Side Projects
sachag
455
43k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Docker and Python
trallard
47
3.7k
Test your architecture with Archunit
thirion
1
2.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
120
Speed Design
sergeychernyshev
33
1.5k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.2k
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 𝑈 Σ Σ𝑉†