知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴...

32
知能システム論1 (3) 2009.4.21 情報システム学研究科 情報メディアシステム学専攻 知能システム学講座 末廣尚士

Transcript of 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴...

Page 1: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

知能システム論1 (3)

2009.4.21情報システム学研究科

情報メディアシステム学専攻

知能システム学講座

末廣尚士

Page 2: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 講義資料のHP

http://www.taka.is.uec.ac.jp/ から右のメニューの class をクリック

または

http://www.taka.is.uec.ac.jp/class2009/class2009.html  を直接入力

Page 3: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

2. Python入門 - Pythonの特徴

インタプリタ インタプリタ v.s. コンパイラ

段付けが構文的に意味を持つ 段付けによるブロック構造

柔軟なデータ型 リスト、辞書

拡張性 C言語インタフェース

内観機能 プログラムの中から変数などの情報を得ることができる

参考:日本Pythonユーザ会 <http://www.python.jp/>

Page 4: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Pythonのどこが良いか

Page 5: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 参考書

オンラインドキュメント http://www.python.jp/Zope/links/python_

documents チュートリアル

http://www.python.jp/doc/release/tut/ 「Python デスクトップリファレンス」(オライリー

・ジャパン) 「はじめてのPython」(オライリー・ジャパン)

Page 6: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Pythonのインストール

Pythonのインストール

VPythonのインストール バージョンを合わせる必要がある

Windows インストーラによるインストール

Linux インストールはディストリビューション依存 インストール済みVMware Image

VMware Playerが必要 <http://www.vmware.com/jp/products/player/>

Page 7: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Windowsでのインストール

<http://vpython.org/win_download25.html>から以下をダウンロード

Python-2.5.1.msi VPython-Win-Py2.5-3.2.11.exe

pythonから順にそれぞれのファイルをダブルクリックしてインストール

pythonは、”c:\Python25”にインストールすること(デフォールトはそうなっている)

Page 8: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Vine Linuxでのインストール(1)

linuxの場合インストールはディストリビューション依存。ここでは例としてVine。

まずVine4.2をフルインストール。 パッケージを最新し、開発キットを入れる。

python2.4.4が入った状態になっている。

# apt-get update.# apt-get upgrade.# apt-get script install-devel.lua.

Page 9: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Vine Linuxでのインストール(2)

libboost-python, libboost-python-devel, python-numeric, python-numeric-develをapt-getまたはsynapticで入れる。

libboost_python-gcc33.soにlibboost_python.soからリンクを張る

# cd /usr/lib# ln -s libboost_python-gcc33.so libboost_python.so

Page 10: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Vine Linuxでのインストール(2)

<http://vpython.org/linux_download.html>からgtkglarea-1.2.3.tar.gz, visual-3.2.9.tar.bz2をダウンロードして展開

それぞれのディレクトリでmakeしてインストール

configureのときに、--prefix=/usrを忘れないこと。

これで完成。 ただしgtkのwarningがでる。

$ cd gtkglarea-1.2.3$ ./configure –prefix=/usr$ make$ su# make install$ exit

$ cd visual-3.2.9$ ./configure –prefix=/usr$ make$ su# make install$ exit

Page 11: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- VMwareイメージの使い方

Vine4.2にVPyhonまでインストールしたものをVMware Image (約3.5G)として用意してある。

これを使うには、VMware Playerなどが必要 <http://www.vmware.com/jp/products/player/>から

VMware Player 2.5.1のインストーラをダウンロードしてインストールする。

VMware Image をダウンロードして”My Virtual Machines”のフォルダに置く

VMware Playerから走らせる。

Page 12: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Python入門

Hello World 変数 データ型 演算子 制御構造 関数 オブジェクト 内観機能 モジュール

Page 13: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Hello World(1)

インタラクティブにやるのは、とても簡単

スクリプトファイル:hello.py の場合

>>> print "Hello World!"Hello World!

#!/usr/bin/env python# -*- Python -*-

print "Hello World"

unixの場合のおまじない“#” は一般にはコメント、でもファイルの先頭の“#!”はシェルコマンドを指定する

Page 14: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- Hello World(2) Windowsの場合で実行

コマンド窓でやる。でないと一瞬で消える。 または、python idle で開いてモジュール実行

Linuxの場合

C: ....> hello.pyHello World

$ ./hello.pyHello World

$ python hello.pyHello World

こちらだと「おまじない」も「実行属性」もなしでもOK

この前に、$ chmod a+x hello.pyなどとして実行可能にしておく必要がある

Page 15: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 変数

変数は宣言なしで使える 変数にはいろいろな型のデータを代入するこ

とができる

>>> a=1>>> b=2>>> b=2.0>>> c="abc">>> d="def">>> a+b3.0>>> c+d'abcdef'

Page 16: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- データ型

数値(整数、実数など) 文字列 リスト タプル 辞書 真偽

Page 17: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

 - リスト (list) とてもフレキシブルなデータ構造>>> a=[1,2,[5,6],3.4,[3,5.6]]>>> a[1, 2, [5, 6], 3.3999999999999999, [3, 5.5999999999999996]]>>> a[2][5, 6]>>> a[-1][3, 5.5999999999999996]>>> a[1:3][2, [5, 6]]>>> a[3:][3.3999999999999999, [3, 5.5999999999999996]]>>> a[3]=[1,2]>>> a[1, 2, [5, 6], [1, 2], [3, 5.5999999999999996]]

Page 18: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- タプル (tuple)

変更のできないリスト

>>> a=(1,2,3)>>> a[1]=3

Traceback (most recent call last): File "<pyshell#95>", line 1, in <module> a[1]=3TypeError: 'tuple' object does not support item assignment>>>

Page 19: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 文字列

文字の一次元タプルのようなもの “abc” と ‘abc’ の2つの表現が可能

>>> a='abc'>>> b="def">>> c=a+b>>> c'abcdef'>>> c[2:5]'cde'>>> c[2]='a'

Traceback (most recent call last): File "<pyshell#115>", line 1, in <module> c[2]='a'TypeError: 'str' object does not support item assignment>>>

Page 20: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 辞書

キーワードでデータにアクセスできる

>>> a={'key1':123, 1:'item1', 3.5:'item2', 'key2':[1,2,3]}>>> a{3.5: 'item2', 1: 'item2', 'key1': 123, 'key2': [1, 2, 3]}>>> a[3.5]'item2'>>> a['key2'][1, 2, 3]>>> a[1]='item1'>>> a[1]={'a1':3, 'a2':5}>>> a{3.5: 'item2', 1: {'a1': 3, 'a2': 5}, 'key1': 123, 'key2': [1, 2, 3]}>>>

Page 21: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 真偽 基本は True と False 条件分岐では0, None,[], {}も偽、その他

は真 True は 1 と同じ

False は 0 と同じ

>>> 1 == TrueTrue>>> 2 == TrueFalse>>>

>>> 0 == FalseTrue>>> [] == FalseFalse

Page 22: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 演算子

Cなどと似ている

四則:+, - , *, /, …. 論理:==, !=, >, <>,

文字列やリストも演算の対象

>>> [1] + [2][1, 2]>>> >>> [1,1] < [1]+[2]True>>>

Page 23: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 条件分岐

if と else >>> a=True>>> if a :

print 1else :

print 2

1>>> a=False>>> if a :

print 1else :

print 2

2

ブロックの段付けに注意!

コロン

注意:else の段付けが変なのはインタプリタのプロンプト出力が原因

Page 24: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 条件分岐 (and と or)

A and B A式を実行、真ならばB式も実行、

偽ならばB式は実行しない。

A or B A式を実行、偽ならばB式も実行、

真ならばB式は実行しない。

>>> a = True>>> a and 11>>> a = False>>> a and 1False

>>> a = True>>> a or 1True>>> a = False>>> a or 11

Page 25: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 制御構造(ループ)

forループ

whileループ

>>> i = 0>>> sum = 0>>> while i< 10 :

sum = sum + ii = i + 1

>>> sum45

>>> sum = 0>>> i = 0>>> for i in range(10):

sum = sum + i

>>> sum45>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ブロックの段付けに注意!

コロン

Page 26: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 制御構造(ループからの脱出)

breakを使う

>>> i = 0>>> sum = 0>>> while True :

sum = sum + ii = i + 1if i >= 10 :

break

>>> sum45

Page 27: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 関数定義 def と return

return がないと値が返らない

>>> def test(x, y) :return 2 * x + y

>>> test(3 ,2)8

>>> def test(x, y) :2*x+y

>>> test(2,3)>>> a=test(2,3)>>> a>>>

Page 28: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 関数についての補足

仮引数はローカル変数 呼び出しは値渡し return で複数の値を戻すことができる

戻された値はタプルとして戻る。 1つの変数で全体を受けるか、 同数の複数の変数で別々に受けることができる。

変数のアドレスを渡すことはできない 一般には戻り値を代入する どうしても変数に値を入れて戻ってきたいときは構

造体を渡す

Page 29: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- オブジェクト

class N_multiply : def __init__(self, n) : self._n = n def multiply(self, x) : return self._n*x

>>> a = N_multiply(5)>>> a.multiply(4)20>>> a._n5>>> a._n=10>>> a.multiply(3)30>>>

class 定義

オブジェクトの利用

Page 30: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 内観機能

それが何であるかを調べる dir 関数

>>> a<__main__.N_multiply instance at 0x00CC8BC0>>>> dir(a)['__doc__', '__init__', '__module__', '_n', 'multiply']>>> N_multiply<class __main__.N_multiply at 0x00CB3810>>>> dir(N_multiply)['__doc__', '__init__', '__module__', 'multiply']

Page 31: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- モジュール

他のファイルをmoduleとして読み込むことができる。

N_multiplyの定義が my_module.pyにあるとすると、、、

import my_module>>> a = my_module.N_multiply(5)>>> a.multiply(4)20>>> a._n5>>> a._n=10>>> a.multiply(3)30>>>

from my_module import *>>> a = N_multiply(5)>>> a.multiply(4)20>>> a._n5>>> a._n=10>>> a.multiply(3)30>>>

Page 32: 知能システム論1 (3) - University of Electro ...2. Python入門 - Pythonの特徴 インタプリタ インタプリタ v.s. コンパイラ 段付けが構文的に意味を持つ

2009年度前学期 電気通信大学大学院 情報システム学研究科情報メディアシステム学専攻 知能システム論1

- 次回予告

pythonでベクトル、行列、座標系の演算