Upload
kenta-owaki
View
989
Download
1
Embed Size (px)
Citation preview
Python 講座 2015 年版 第 3 回名古屋工業大学大学院工学研究科創成シミュレーション工学専攻 2 年学籍番号 :26413508大脇 謙太
PYTHONを使ったプログラミング
前回までのあらすじ
第 1 回組み込み型を説明 第 2 回オブジェクト指向を説明
今回の目標
オブジェクト指向を Python を使って理解しよう
インタプリタ言語• Python はインタプリタ言語– ソースコードをコンパイルしない方式
• Python は対話型– Unix のシェル ( ターミナル ) みたいだよという話
遅いけど、融通が利いて扱いやすい
Break
オブジェクト指向
一度、おさらいしてみよう
オブジェクト
一つのテーマをもとに集めたデータと命令 ( 処理 )
vol の値Gate の値
Comp の値
Gate(x)Volume( x )
Effect( ON/OFF)
オブジェクトデータ
手続き
Python で使われるオブジェクト
集合型
組み込み型そのもの ( ただし、数値型は例外 )
文字列 リスト タプル 辞書 集合
クラス と インスタンスlist クラス ( 設計書 )
インスタンスを生成する手続き( コンストラクタ )=> クラス名に’ ()’ をつける
list インスタンス
動的型付け
インスタンスを生成
変数名 ( ステッカ )“l” を付ける
以後、 l で呼び出せる
メソッド
メソッドは、オブジェクトの後ろに‘.( ドット ) 関数名 (args)’
list.append(x)リストの末尾に要素を一つ追加します
< メソッド >
ちゃんと追加されている
オブジェクトに与えられた機能を使う
List 型のメソッドメソッド名 説明list. append(x) リストの末尾に要素を一つ追加します。 list. extend(L) 指定したリストの要素を対象のリストに追加し、リストを拡張します。list. insert(i, x) 指定した位置に要素を挿入します。list. remove(x) リスト中で、値 x を持つ最初の要素を削除しますlist. pop([i]) リスト中の指定された位置にある要素をリストから削除して、その要素を返
します。list. clear() リスト中のすべての要素を削除します。list. index(x) リスト中で、値 x を持つ最初の要素のインデクスを返しますlist. count(x) リストでの x の出現回数を返します。list. sort() リストの項目を、インプレース演算でソートします。list. reverse() リストの要素を、インプレース演算で逆順にします。
Python 2.7ja1 documentation より - http://docs.python.jp/2.7/tutorial/datastructures.html
おすすめの Web サイト人工知能に関する断創録
http://aidiary.hatenablog.com/
管理人 id:aidiary 氏ブログの説明人工知能、認知科学、心理学、ロボティクス、生物学、ゲーム AI などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、音声認識・音声合成、複雑系(カオス、力学系)、 Deep Learning など。
おすすめの Web サイト機械学習の「朱鷺の杜 Wiki 」
http://ibisforest.org/
管理人 あかほ氏副管理人 しましま氏サイトの説明朱鷺の杜 Wiki は,機械学習に関連した,データマイニング,情報理論,計算論的学習理論,統計,統計物理についての情報交換の場です.これら機械学習関係の話題,リンク,関連事項,書籍・論文紹介などの情報をを扱います.
管理者ブログ : ( あかほ氏 )http://ibisforest.blog4.fc2.com/
ところでこのインスタンスは後で呼び出せない ( 参照できないから )
参照できないインスタンスは 自動的に削除していくガベージコレクション
メモリリークを防いでくれる
ライブラリ (LIBRARY)
§1. モジュールとパッケージ§2. import, from§3. 拡張ライブラリ
プログラムを組む• プログラムってなに ?– 台本。命令・指示の順番を書き込む– ドラマや映画、アニメの台本と基本的には同じ
• “ 誰が” , ” どのタイミングで” , ”何をするか”を書く
組み込み型だけでも十分なプログラムを書ける
Pro-graming : 先進的な文法
ところが組み込み型だけではどうにもならないこともある
(苦労が多いこともある )
例 ) sin 関数作ってくれよ .
どこかにいい関数おちてないかな…
研究を進めていくなら、 sin 関数は避けては通れない道うーむ…
手は打ってある基礎的な問題を解決する手法はすでに用意してある
例 ) sin 関数作ってくれよ .
Python 「もうあるんだなぁ、これが。」Python 「つ mathモジュール」
外部に”モジュール”という形で用意してあります
Python には標準モジュールのライブラリが付属しています。Library : 図書館
§1.モジュールモジュールは Python の定義や文が入ったファイル
– 定義 : 定数 , 関数定義 , クラス定義 – 文 : 初期化 , グローバル変数 [ ]※
[ ] ※ モジュール内で定義されたグローバル変数のスコープはそのモジュールのみで有効です。他のモジュールと、同じグローバル変数名で定義しても、変数の衝突は起こりません。
モジュール = 本、参考書という捉え方でよいと思います。
先ほどの例
mathモジュールの sin 関数を使うには
例 ) sin 関数作ってくれよ .
Python 「もうあるんだなぁ、これが。」Python 「つ mathモジュール」
この表現方法は インスタンスとメソッドの関係math.sin( x )
list.append(x)リストの末尾に要素を一つ追加します
パッケージPython にはモジュール以外に”パッケージ”というものも存在します
に対し、
モジュール = 本 , 参考書 パッケージ = シリーズ本 , 教科書セット
モジュールが本一冊に対し、パッケージは複数の本のセットを表します。当然、パッケージはモジュールよりも広い範囲をカバーしたオブジェクトです
パッケージの構成
package
subpackage
subpackage
initialize
module
module
initialize…
…
おさらい• Python はライブラリにモジュール、パッケージを備えている
– ライブラリ = 図書館– モジュール = 本、参考書 ( 一冊 )– パッケージ = シリーズ本、教科書セット ( 複数 )
• ライブラリからモジュール、パッケージを引っ張ってくることでプログラミングでできることを増やす– レポートを書くのに、図書館で本を借りてくる
前項よりライブラリからモジュール、パッケージを引っ張ってくることでプログラミングでできることを増やす
ソースコードには、モジュールやパッケージを引用していることを明示する何かが必要
Import 文
§2. importモジュールをスクリプト ( ソースコード ) で利用するために必要な文
import モジュール名で、呼び出す
例 : import math(mathモジュールをインポート )
厳密には、モジュールオブジェクト ( インスタンス ) をそのモジュール名を変数名にして代入しているような感覚変数の動的型付けがはたらいている
math モジュールオブジェクトは singleton であり、生成できるインスタンスがユニークである点に注意してください
疑問点Q. モジュールから特定の関数、クラス パッケージから特定のモジュールだけを利用することは ?
A. 可能です。 from 文を使いますQ. import の際、モジュールにつける変数名を変えることは ?
A. 可能です。 as 文を使いますQ. 同じモジュールオブジェクトを複数生成することは ?
A. できません。各モジュールは一つのみ生成可能 (singleton) です。
from
• モジュールから特定の関数、クラスを import• パッケージから特定のモジュールを import
from モジュール名 import 関数名from パッケージ名 import モジュール名
• パッケージから特定のモジュールの特定の関数を import
from パッケージ名 .モジュール名 import 関数名
select
from について
通常の import
from を使ったimport
mathモジュールから sin 関数のみをimport
math. を省略して記述可mathモジュールの sin と pi をそれぞれ呼出
mathモジュール全体を import
from を使って import した場合、import した関数、クラス、定数しか使えない( 今回は sin 関数のみ )
from を使った import では必要な関数 , 定数 , クラスをすべてimport する必要あり
as
モジュールを別名で import
import モジュール名 as 別名例 : import math as m import numpy as np
(注 ) as を使って別名で import した場合、• 別名でモジュールは呼び出せる• モジュール名ではモジュールを呼び出すことはできない
m
mathモジュール
別名で import
O.K.
error
おさらいのおさらい
Python には標準モジュールのライブラリが付属している
§3. ライブラリライブラリ (図書館 ) は拡張することができる
拡張ライブラリ
標準ライブラリ拡張ライブラリ
Add!
1. distutils : パッケージ管理用モジュール ( 標準モジュール )
2. setuptools : distutils の強化版– easy_install : 付属ツール
3. pip : easy_install の強化版
PyPI : the Python Package Index
Web上のライブラリリポジトリを利用– distribute のインストール
• $> wget http://python-distribute.org/distribute_setup.py• $> python distribute_setup.py
– easy_install の利用• $> easy_install package_name
– pip の利用• $> pip install package_name• $> pip uninstall package_name• $> pip freeze• $> pip search key_word
2015 年現在 pip がもっとも主流であると考えられますWindows の場合、実行形式 (.exe) のインストーラが用意されているパッケージもあります
代表的な (拡張 )パッケージこれぐらい入れておくと、あとあと困らないかなぁ…程度
ほぼ必須 .非常に優れたライブラリ
Numpy : Python の数値計算を代表するパッケージTheano : 同じく数値計算用 . 自動微分のサポート Scipy : Numpy を応用し、科学計算向けに強化Matplotlib : 高機能の作図用パッケージpySpark : 分散処理 (Spark) を Python で使えるようにしたものiPython : 強化型対話シェル . notebook 機能が非常に便利
個人の研究に合わせて• pandas : データ分析ライブラリ , かなり高機能と好評• pylearn2 : DeepLearning用パッケージ . Theano を応用• PIL : 画像処理用ライブラリ . 2.x 系まで
– Pillow : 画像処理用ライブラリ 3 系• scikit-learn : 機械学習ライブラリ• openCV : コンピュータビジョン用ライブラリ (Python用 )
• NetworkX : ネットワーク解析用のパッケージ
GUI 系 ( どれか 1 つ入っているとよいかも )
• TkInter : 標準パッケージ . IDLE はこれでできている• wxPython : wxWidgets 系• pyQt : Qt 系• pyGTK : GTK 系• pygame : 2D用ゲームライブラリ• kivy : pygame をもとにした汎用 GUI ライブラリ• Pyglet : Python3 対応 . 良質 GUI(?)
その他• pyaudio : オーディオ操作用ライブラリ• date-util• pyparsing
• socket : 低レベルソケット通信 . TCP/UDP. 標準
ここ 2 つは Matplotlib で必要
Numpy を使用行列の演算
numpy パッケージをnp という別名でインポート
numpy の array メソッドを使用(2×3 の行列を生成 )
numpy の randomモジュールにあるrand メソッドを使用(3×2 の行列を生成 )
内積をとる(2×2行列 )
b と c の転置について、各要素を掛け算(2×3行列 )
WAVファイルを FFTwaveモジュール ( 標準 ), numpy を使用します
wave ファイルを読み込み
128点ごとに FFT
matplotlib(pylab) を使用します
をプロット
pyQt を使って GUI を作成参照サイト : Hope is a Dream. Dream is a Hope.http://hope-is-dream.hatenablog.com/entry/2015/01/24/143402
PCA(主成分分析 )
SlideShare : http://www.slideshare.net/RansuiIso/pyqtgui
IPython Notebook
IPython(Interactive Python)科学計算をより対話的かつ便利に
IPython NotebookIPython を Web ブラウザのノートブック上で編集・保存・共有
非常に可読性の高い文書を作成できる
IPython Notebook
Scipy
2014 年度版 Pythonゼミより抜粋
Python Semi 第4回黒柳研究室M1
学籍番号:26413508大脇 謙太
参考文献• YATTSUKE BLOG
– http://hennohito.cocolog-nifty.com/blog/2013/02/python-gui-f3c1.html
• 科学技術計算のために Python を始めよう。– http://turbare.net/transl/scipy-lecture-notes/intro/
• Python のすすめ• IPython Notebook チュートリアル
– http://qiita.com/payashim/items/d4fe5227b21a5215e78b
参考文献• Fernando Perez
– http://blog.fperez.org/2012/01/ipython-notebook-historical.html
• IPython Notebook 入門 ~ファイル保存先について– http://qiita.com/HirofumiYashima/items/bb187ebfc61662a7295e
次回予告最後はまとめ . 細かな注意点