Submit Search
Introduction to NumPy & SciPy
18 likes
9,442 views
Shiqiao Du
Tokyo.SciPy 2011/8/28 で使用
Technology
Education
Read more
1 of 38
Download now
Downloaded 133 times
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
More Related Content
PDF
NumPyが物足りない人へのCython入門
Shiqiao Du
PDF
Cython intro prelerease
Shiqiao Du
PDF
NumPy闇入門
Ryosuke Okuta
PDF
Cython ことはじめ
gion_XY
PDF
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
PDF
Python for Data Anaysis第2回勉強会4,5章
Makoto Kawano
PDF
Wrapping a C++ library with Cython
fuzzysphere
PPTX
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
NumPyが物足りない人へのCython入門
Shiqiao Du
Cython intro prelerease
Shiqiao Du
NumPy闇入門
Ryosuke Okuta
Cython ことはじめ
gion_XY
Pythonデータ分析 第3回勉強会資料 8章
Makoto Kawano
Python for Data Anaysis第2回勉強会4,5章
Makoto Kawano
Wrapping a C++ library with Cython
fuzzysphere
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
What's hot
(20)
PDF
Chainerの使い方と自然言語処理への応用
Seiya Tokui
PPTX
R高速化
Monta Yashi
PDF
R-hpc-1 TokyoR#11
Shintaro Fukushima
PDF
Rの高速化
弘毅 露崎
PDF
Intoroduction of Pandas with Python
Atsushi Hayakawa
PDF
CuPy解説
Ryosuke Okuta
PDF
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
Motoya Wakiyama
KEY
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
PDF
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
PDF
研究生のためのC++ no.2
Tomohiro Namba
ODP
Real World OCamlを読んでLispと協調してみた
blackenedgold
ODP
(define)なしで再帰関数を定義する
blackenedgold
PDF
数式をnumpyに落としこむコツ
Shuyo Nakatani
PDF
111015 tokyo scipy2_ディスカッション
Shohei Hido
PDF
関数型プログラミング入門 with OCaml
Haruka Oikawa
PDF
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Kenta Oono
PDF
boost tour 1.48.0 all
Akira Takahashi
PDF
Pythonデータ分析 第4回勉強会資料 12章
Makoto Kawano
PDF
研究生のためのC++ no.4
Tomohiro Namba
Chainerの使い方と自然言語処理への応用
Seiya Tokui
R高速化
Monta Yashi
R-hpc-1 TokyoR#11
Shintaro Fukushima
Rの高速化
弘毅 露崎
Intoroduction of Pandas with Python
Atsushi Hayakawa
CuPy解説
Ryosuke Okuta
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
Kosaku Ono
2013.07.15 はじパタlt scikit-learnで始める機械学習
Motoya Wakiyama
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
科学技術計算関連Pythonパッケージの概要
Toshihiro Kamishima
研究生のためのC++ no.2
Tomohiro Namba
Real World OCamlを読んでLispと協調してみた
blackenedgold
(define)なしで再帰関数を定義する
blackenedgold
数式をnumpyに落としこむコツ
Shuyo Nakatani
111015 tokyo scipy2_ディスカッション
Shohei Hido
関数型プログラミング入門 with OCaml
Haruka Oikawa
2015年9月18日 (GTC Japan 2015) 深層学習フレームワークChainerの導入と化合物活性予測への応用
Kenta Oono
boost tour 1.48.0 all
Akira Takahashi
Pythonデータ分析 第4回勉強会資料 12章
Makoto Kawano
研究生のためのC++ no.4
Tomohiro Namba
Ad
Viewers also liked
(11)
PDF
エクセルで統計分析 統計プログラムHADについて
Hiroshi Shimizu
PPTX
Raspberry Pi and Scientific Computing [SciPy 2012]
Samarth Shah
PDF
VBAで数値計算 10 逆行列と疑似逆行列
Katsuhiro Morishita
PDF
The Joy of SciPy
kammeyer
PDF
Scientific Computing with Python Webinar 9/18/2009:Curve Fitting
Enthought, Inc.
KEY
今日からわかる!ソーシャルグラフ解析
Daichi Onodera
PDF
2部グラフとソーシャルネットワーク
Hiroko Onari
PDF
2章グラフ理論スピード入門
Teruo Kawasaki
PDF
距離と分類の話
考司 小杉
KEY
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
Keiichiro Ono
PDF
High performance python computing for data science
Takami Sato
エクセルで統計分析 統計プログラムHADについて
Hiroshi Shimizu
Raspberry Pi and Scientific Computing [SciPy 2012]
Samarth Shah
VBAで数値計算 10 逆行列と疑似逆行列
Katsuhiro Morishita
The Joy of SciPy
kammeyer
Scientific Computing with Python Webinar 9/18/2009:Curve Fitting
Enthought, Inc.
今日からわかる!ソーシャルグラフ解析
Daichi Onodera
2部グラフとソーシャルネットワーク
Hiroko Onari
2章グラフ理論スピード入門
Teruo Kawasaki
距離と分類の話
考司 小杉
『繋がり』を見る: Cytoscapeと周辺ツールを使ったグラフデータ可視化入門
Keiichiro Ono
High performance python computing for data science
Takami Sato
Ad
Similar to Introduction to NumPy & SciPy
(20)
PDF
Introduction to Chainer and CuPy
Kenta Oono
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
PDF
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
PPTX
なにわテック20180127
Natsutani Minoru
PPTX
関数型言語&形式的手法セミナー(3)
啓 小笠原
PDF
110828 tokyo scipy1_hido_dist
Shohei Hido
PPTX
PythonでDeepLearningを始めるよ
Tanaka Yuichi
PPTX
Coq 20100208a
tmiya
PDF
Introduction to Chainer (LL Ring Recursive)
Kenta Oono
PDF
第3回 JavaScriptから始めるプログラミング2016
kyoto university
PDF
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
PDF
PFI Christmas seminar 2009
Preferred Networks
PDF
Deep learning実装の基礎と実践
Seiya Tokui
PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
PDF
Python standard 2022 Spring
anyakichi
PDF
Thinking in Cats
Eugene Yokota
PDF
PythonによるDeep Learningの実装
Shinya Akiba
PPTX
東大生向けデータ解析講座 第2回 2017/12/29
西岡 賢一郎
PDF
Chainer/CuPy v5 and Future (Japanese)
Seiya Tokui
Introduction to Chainer and CuPy
Kenta Oono
Python 機械学習プログラミング データ分析ライブラリー解説編
Etsuji Nakai
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
なにわテック20180127
Natsutani Minoru
関数型言語&形式的手法セミナー(3)
啓 小笠原
110828 tokyo scipy1_hido_dist
Shohei Hido
PythonでDeepLearningを始めるよ
Tanaka Yuichi
Coq 20100208a
tmiya
Introduction to Chainer (LL Ring Recursive)
Kenta Oono
第3回 JavaScriptから始めるプログラミング2016
kyoto university
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Hiromi Ishii
PFI Christmas seminar 2009
Preferred Networks
Deep learning実装の基礎と実践
Seiya Tokui
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
Python standard 2022 Spring
anyakichi
Thinking in Cats
Eugene Yokota
PythonによるDeep Learningの実装
Shinya Akiba
東大生向けデータ解析講座 第2回 2017/12/29
西岡 賢一郎
Chainer/CuPy v5 and Future (Japanese)
Seiya Tokui
Introduction to NumPy & SciPy
1.
NumPy & SciPy
入門
2.
Contents NumPy & Scipy
の機能紹介 → ndarrayクラスの操作を中心に説明 NumPy & SciPy を使ったプログラミング → 線形回帰、 主成分分析, K-Means → Pythonの特徴であるOOPも取り入れる ndarrayのviewと参照渡し
3.
Contents NumPy & Scipy
の機能紹介 → ndarrayクラスの操作を中心に説明 NumPy & SciPy を使ったプログラミング → 線形回帰、 主成分分析, K-Means → Pythonの特徴であるOOPも取り入れる ndarrayのviewと参照渡し
4.
What is NumPy/SciPy? Pythonで数値計算 数値計算 ≒
繰り返し作業、ループ Pyhton : ループが遅い、その他諸々は書きやすい。 C,Fortran : ループが速い、冗長な表現が多い。 ループのある作業をC,Fortranで書き、 それをpythonから呼べたら便利!
5.
What is NumPy/SciPy? NumPy ●
Cで実装されたndarray class ● Universal Function ● 乱数の生成 ● f2pyによるFortranとの連携 SciPy ● NumPyを元に様々な数値計算の関数の集合 ● BLAS/LAPACKを使った行列計算 ● FFT,クラスタリング、関数最適化 などなど
6.
What is NumPy & SciPy? numpy.ndarray class 数値計算用のN次元配列
Homogeneous N-dimensional Array 各要素の型がすべて同じ → CやFortranの配列 強力なインデクシング表現 A[0:10, 3] etc Universal functionによる直感的な数式の表現 y[:] = 3.0 * np.sin(x[:]) + x[:]**2 + e[0,:] etc
7.
ndarray class ndarrayの生成 ✔np.array : listなどをndarrayに変換 ✔np.empty
: 任意のサイズを確保,Cのmalloc相当 ✔np.zeros : 0で初期化,Cのcalloc相当 ✔np.ones : 1で初期化 ✔np.identity : 単位行列 etc
8.
ndarray class ndarrayの属性 ✔dtype : 各要素の型,
float64 etc ✔ndim : 配列の次元 ✔shape : 各次元の要素数のtuple ✔size : 1次元にした時の長さ ✔data : 実際のデータがbuffer objectとして保持されている。
9.
ndarray class 要素の参照、代入 ✔個々の参照 : x[2],
x[-1], A[1, 2], B[3, 2, 5] ✔スライスによる一括参照 : x[from:to:step] e.g. x[2:6], x[::-1], A[1, :], A[::2, :6 ✔1つの要素へ代入 : x[4] = 10.0 ✔スライスを使った代入 : x[1:5] = 3.0, A[0, 1:7] = x[0:6]
10.
ndarray class Universal Functions 配列のすべての要素に対して同じ操作を施す。 (elementwise
operation) 基本的にFortran90の配列演算と同じ。 ✔b[:] = 2.0 * a[:] + 1.0 ✔B[:,:] = np.exp(A[:,:]) ✔C[:,1:10] = B[:,3:12] + np.sin(B[:,:9]) ✔D = C[:,1:10] * C[:,1:10] ← 行列積ではないので注意!
11.
ndarray class Broadcast : 配列形状の自動調整
EuroScipy 2010, Python Scientific Notes より引用
12.
ndarray class Broadcastをうまく使うためのコツ np.newaxisを使って配列の次元を揃える
✔A[10,3] に x[3] を足す → A[:,:] + x[np.newaxis,:] for i in xrange(3): A[:,i] += x[i] 相当の計算になる。(もちろんこれより速い。) ✔B[100,4,10] に y[4] を掛る → B[:,:,:] * y[np.newaxis,:,np.newaxis] for i in xrange(4): B[:,i,:] *= y[i]
13.
ndarray class Fancy Indexing
✔ixs = [0,2,2,4], x[ixs] → array(x[0],x[2],x[2],x[4]) ✔np.where(x[:]>1) → 1より大きいxのインデックスの配列 ✔np.where(x[:]>0,x,10) → xの0以上の要素をすべて10にする ✔mask = A[:,:] > 0 → maskはbool型でAと同じshapeをもつndarray → A[mask]は0以上のAの要素が入った1D-ndarray ✔mask = np.sum(A[:,:]**2,1) < 0, inner_sphere = A[mask,:] → 球の内側のデータ
14.
ndarray class io関係 ✔np.savetxt :
ファイルにndarrayを書き込む np.savetxt(“data.log”,data) ✔np.loadtx : ファイルからndarrayに読み込む data = np.loadtxt(“data.log”) ✔PythonのbuiltinのPickleも使える 大きいデータをバイナリで保存する際に便利
15.
NumPyと 乱数 numpy.random
✔Mersenne Twisterによる乱数生成 ✔rand : [0,1)上の一様乱数 r = rand(100,3) → 一度に生成して配列に格納 ✔randn : 標準正規乱数、randと同様に配列に格納もできる ✔dirichlet, normal, t, beta, poissson 他多数 shapeを引数にとって配列に格納もできる。 rand,randnとは書式が多少違うので注意!
16.
NumPyの統計関数 ✔np.max, np.min :
最大最小 ✔np.argmax, np.argmin : 最大最小の位置 ✔np.mean, np.var, np.std : 平均、分散、標準偏差 ✔np.sort, np.argsort : 配列のソートとそのインデックス これらは任意次元のndarrayとaxisを引数にとって任意の 軸に対して実行可 ✔np.cov : 共分散,データは2D-ndarrayのみ shapeは(ndim,nobs)の順なので注意!
17.
NumPy/SciPyで行列計算 np.dot
(BLASのラッパー) np.dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m]) 例 x,y 1D-array, A,B 2D-array ● dot(x,y) → スカラ, BLASの***dot相当 ● dot(A,x) → ベクター, BLASの***mv相当 ● dot(A,B) → 行列, BLASの***mm相当(dgemmとか) その他、 outer, tensordotとかもある
18.
NumPy/SciPyで行列計算 scipy.linalg (LAPACKのラッパー)
● det : 行列式 ● inv, pinv : 逆行列、 擬似逆行列 ● solve, lstsq : 連立方程式の解、最小自乗解 Ax = b → x = solve(A,b) ● eig, eigh, svd : (一般化)固有値分解、 特異値分解 (***ev,***gv,***svd) eig_val, eig_vec = eigh(A) ● 行列の因子分解 lu, qr, cholesky etc
19.
特殊関数 scipy.special ●ほとんどがUniversal
Functionなのでndarrayを食わせると 一気に計算してくれる。 ● gamma関数群 (分布関係でよく使う) gamma, gammaln, digamma ● ベッセル関数、楕円関数など諸々 (あまりつかったことない...)
20.
そ の他諸々 ●
scipy.spatial : KD-treeとか距離計算とか ● scipy.sparse : 疎行列とその線形代数 ● scipy.cluster : 階層/非階層クラスタリング ● scipy.fftpack : Fourier変換 ● scipy.interpolate : スプライン補完とか ● scipy.optimize : 関数最適化、非線形フィッティングとか ● scipy.constants : 科学定数集
21.
Matplotlib とにもかくにも import matplotlib.pyplot
as plt ● plot(x, y ,[symb, label, linewidth]) : xとyをsymbでプロット ● legend : labelを表示 ● xlabel, xlim, xtics : 軸の表示設定、yも同様 ● show : 画面にプロットの結果を表示 ● savefig : 画像ファイルにプロットを保存 (png, eps, svg, pdf)
22.
便利なPythonのパッ ケ ージ scikits.learn
: NumPy&SciPyを使った機械学習のライブラリ ● PyMC : MCMCによるベイズ推定 ● Networkx : グラフアルゴリズム ● OpenOpt : 関数最適化 (Pythonインターフェイスあり) ● OpenCV : 画像処理 (Pythonインターフェイスあり) ● NLTK : 自然言語処理 ● pyMPI, PyCUDA : MPI, CUDAへのインターフェース ● Biopython, PyMol, MODELLER : バイオインフォマティクス ● pygresql, mysqldb, pysqlite2 : SQLへのインターフェイス ● Universal Feed Parser : RSS, ATOMのパーサー ● PyPI <http://pypi.python.org/pypi> で欲しいパッケージを検索できる。
23.
Contents NumPy & Scipy
の機能紹介 → ndarrayクラスの操作を中心に説明 NumPy & SciPy を使ったプログラミング → 線形回帰、 主成分分析, K-Means → Pythonの特徴であるOOPも取り入れる ndarrayのviewと参照渡し
24.
NumPy & SciPy
を 用いたプロ グラ ミ ン グ 大原則 ●極力ループにPythonのforではなく、NumPy対応する 関数を使う。(特にデータ数に対するループは厳禁!) ● 大抵の操作はあるのでよく探すこと! ●ホットスポットの検出にはPythonのプロファイラが便 利。 ● それでもやっぱり遅いよ! → f2py, Cythonなどを検討
25.
NumPy & SciPy
を 用いたプロ グラ ミ ン グ Principal Component Analysis 解き方 共分散行列の固有値分解 or データ行列の特異値分解 実装方 (共分散行列版) 1.np.covを使って共分散行列を計算 2.scipy.linalg.eighを使って固有値分解 3.np.dotを使って射影 詳細はソースコード(pca.py)を用いて説明
26.
NumPy & SciPy
を 用いたプロ グラ ミ ン グ Least Square Fit or 解き方 pseudo-inverse 実装方 a) scipy.linalg.svdをコール ← 一番低レベル b) scipy.linalg.pinvをコール c) scipy.linalg.lstsqをコール 詳細はソースコード(regression.py)のを用いて説明
27.
NumPy & SciPy
を 用いたプロ グラ ミ ン グ K-Means (理論) E-Step ● M-Step ●
28.
NumPy & SciPy
を 用いたプロ グラ ミ ン グ K-Means (実装) E- step ● 各サンプルに対してlnPの計算 (二次形式、Mahalanobis距離) → scipy.spatial.distance.cdist 各サンプルに対してlnP最大のクラスタ番号を選ぶ → np.argmax ●M-step c_n = c のサンプルの選択 → ndarrayのfancy indexing機能 平均、共分散の計算 → np.mean, np.cov 詳細はソースコード(kmeans.py)のを用いて説明
29.
Contents NumPy & Scipy
の機能紹介 → ndarrayクラスの操作を中心に説明 NumPy & SciPy を使ったプログラミング → 線形回帰、 主成分分析, K-Means → Pythonの特徴であるOOPも取り入れる ndarrayのviewと参照渡し
30.
ndarrayと view [1] A
= array([[1,2,3], [4,5,6], [7,8,9]]) [2] B = A[0] [3] B[0] = 10 A[0,0]の値は?
31.
ndarrayと view view :
同じメモリ領域を異なるndarrayオブジェクトで共有する機能 メモリを共有しているの配列の要素を変更すると、他の配列の対応 する値も変更される。 知らないとかなりハマる。 (体験談) viewを返す表現、関数 A.view() A[from:to] (スライス) A.T, np.transpose(A) (転置) A.reshape(shape), np.reshape(A,shape) (次元変換) A.swapaxes(a,b), np.swapaxes(A,a,b) (軸の交換) np.tile(A,(a,b,...)) (同じ配列を並べる。a,b.. = 1の時はもとのAとメモリを共有!) A.baseで参照元の配列の内容を見れる。
32.
ndarrayと view 同じメモリ領域を共有しているかを調べる方法 A.__array_interface__[“data”][0] がメモリの領域を指しているのでこれを比較する 例 def isMemoryShared(a,b):
mem_a = a.__array_interface__[“data”][0] mem_b = b.__array_interface__[“data”][0] return mem_a == mem_b メモリを共有したくないときはnp.copyを使う B = np.copy(A[1:3,:])
33.
a = a + 1, a += 1 ●a=a+1 実は一度コピーを作成するので初めと終わりの”a”は メモリ上では全くの別物。 ● a +=
1 aのメモリ上のデータを直接変更している。 (In-place Operation) ●np.exp(a,out=a) universal functionでoutを指定するとin-placeで計算 a.__array_interface__[“data”][0]で確認してみる。
34.
値渡し と 参照渡し
C言語では値渡しと参照渡しを使い分けられる。 値渡し (call by value) 参照渡し (call by reference) void f1(int x){ void f2(int *x){ x = x + 1; *x = *x + 1; } } → f1の外ではxの値は元のまま。 → f2の外でもxの値は1増える。
35.
値渡し と 参照渡し Pythonでは基本は値渡し!
だけど... 例外 ●リストの要素を変更 ●インスタンスのメンバーを変更 ●ndarrayの要素を変更 ●ndarrayをin-place operationで変更
36.
値渡し と 参照渡し
def npf1(x): # これはx自身が更新される x[0] = 1 def npf2(x): def npf3(x): # xは不変 # xは更新される x=x+1 x += 1 x.__array_interface__で確認! → mutate.py
37.
まとめ ●
NumPyのndarrayクラスの特徴であるindexingとunivesal functio よって数式を直感的にコードに変換できる。 ● ScipyをはじめとしたNumPyを使ったパッケージや他のPythonパッ ケージをうまく利用するといろいろできそう。 ● Pythonの特徴であるOOPとNumPyの高速な数値計算がうまく融 合してかなり効率的なプログラミングが可能。 ● ndarrayのviewの仕組みは知っておかないと意外とハマリやすい...
38.
Thanx for Listening!
Download