AI開発で使うPython
人工知能(AI)の開発に利用されるPythonは、プログラム言語でよく見られる区間を表す「{」「}」や区切りを表す「;」がありません。代わりにインデントが意味を持ちます。高級言語と言われるPythonの文法のうち、AI開発する上で知っておきたいものを書いていきます。
機械学習ライブラリ(入門編)
知らないとAI実装コードが呪文に見えます
データ型
タプル
◆要素を格納します。
後述の「リスト」に似ていますが、変更ができません。
a = (1, 2)
print(type(a))
print(a)
<class 'tuple'>
(1, 2)
◆要素には、数字と文字列など混合も可能です。
a = (1, 2, 'a')
print(type(a[0]))
print(type(a[1]))
print(type(a[2]))
<class 'int'>
<class 'int'>
<class 'str'>
リスト
◆要素を格納します。
l = [1, 2, 3, 4, 5]
print(type(l))
print(l)
<class 'list'>
[1, 2, 3, 4, 5]
◆要素の取り出し方はいくつかあります。
l = [1, 2, 3, 4, 5]
print(l[0])
print(l[2:])
print(l[:3])
1
[3, 4, 5]
[1, 2, 3]
◆enumerateを使うと要素番号と合わせて取り出せます。
l = ['a', 'b', 'c']
for i, item in enumerate(l):
print(str(i) + ':' + item)
0:a
1:b
2:c
◆内包表記はよく登場します。
a = [i for i in range(5)]
print(a)
[0, 1, 2, 3, 4]
ディクショナリ
◆「key:value」の形式で要素を格納します。
dict = {'a':10, 'b':20, 'c':30}
print(type(dict))
print(dict)
<class 'dict'>
{'a': 10, 'b': 20, 'c': 30}
◆「key」を指定して「value」を取り出します。
print(dict['a'])
print(dict['b'])
print(dict['c'])
10
20
30
操作
for文
◆指定回数のループ処理ではrangeが便利です。次の例では要素の個数=3回ループ処理します。
for i in range(3):
print('aa:' + str(i))
aa:0
aa:1
aa:2
◆range(3)は「0」「1」「2」の要素を持ちます。
a = range(3)
print(a)
print(a[0])
print(a[1])
print(a[2])
range(0, 3)
0
1
2
代入
◆下記の例の3行目では、元の変数に直接代入しています。
swap変数を介した入れ替えが不要でコードが短くなります。
l = [1, 2, 3, 4, 5]
print(l)
l = l[3:]
print(l)
[1, 2, 3, 4, 5]
[4, 5]
機能
class、def
◆初期値を100として、n倍する機能を持つクラスを作成します。
class cls_test(): #classの宣言
def __init__(self, a): #コンストラクタ
self.a = a
def linear(self, b): #主要部(モジュール)
out = self.a * b
return out
c_test = cls_test(100) #コンストラクタで初期化
print(type(c_test))
<class '__main__.cls_test'>
◆クラスの定義を確認します。
??c_test
Type: cls_test
String form: <__main__.cls_test object at 0x0000022AFDB15AC0>
Docstring:
◆クラスは初期値100を保持しています。
モジュールを呼び出して100×2=200を実行します。
rtn = c_test.linear(2)
print(rtn)
200
lambda
◆関数の短縮形です。短い処理であればdefを使わず1行で書けます。
square = lambda n:n**2 #宣言部
a = square(3) #呼び出し
print(a)
9
1行目で関数「square」を宣言しています。
2行目の引数「3」は「n」として関数に引き継がれ2乗を計算する流れです。
以上