1章 Python入門 / ゼロから作る Deep Learning
利用するプログラミング言語とライブラリ
Python 3系
NumPy
Matplotlib
Anacondaディストリビューションを使ってインストール
インストール
Anacondaディストリビューションのインストーラをダウンロード
(M1用のインストーラを選択すること)
インストーラを起動してインストールを実施
Anaconda Navigatorが起動する
(base)の消し方
Anacondaインストール後にターミナルを起動すると、(base) なる謎の文字列が表示される。
https://gyazo.com/82bb31057da89ee07fbbd2ec4499202c
Anacondaの仮想環境(なんだそれ?)に入るとこれが表示されるらしいが、必要になるまでは仮想環境に入らないで欲しいし (base) が表示されないで欲しい。
以下を参考に (base) が表示されないようにする。
ターミナル起動時に仮想環境にデフォルトで入らないようにする
code:sh
conda config --set auto_activate_base False
必要になったらAnacondaの仮想環境に入る
code:sh
conda activate
不要になったら仮想環境から抜ける
code:sh
conda deactivate
算術計算
conda activate で仮想環境に入り、Pythonを起動。
code:sh
$ python
>> 1 - 2
-1
>> 4 * 5
20
>> 7 / 5
1.4
>> 3 ** 2
9
データ型
int
float
str
code:python
>> type(10)
<class 'int'>
>> type(2.718)
<class 'float'>
>> type("hello")
<class 'str'>
変数
code:python
>> x = 10
>> print(x)
リスト
code:python
>> len(a)
5
1
5
>> print(a)
ディクショナリ
code:python
>> me = {'height':100}
100
>> print(me)
{'height': 100, 'weight': 70}
NumPy配列の生成
code:python
>> import numpy as np
>> print(x)
>> type(x)
<class 'numpy.ndarray'>
NumPyの算術計算
要素ごとの四則演算。
code:python
>> x + y # 要素ごとの足し算
>> x - y
>> x * y # 要素ごとの積
>> x / y
>>
要素数が異なるとエラーになる。
code:python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (2,) (3,)
行列とスカラ値を組み合わせての算術計算。この機能はブロードキャストと呼ばれる。
code:python
>> x / 2.0
NumPyの多次元配列
1次元の配列だけでなく多次元の配列も作成できる。shapeで行列の形状を、dtypeで要素のデータ型を取得できる。
code:python
>> A = np.array(1, 2], [3, 4)
>> print(A)
>> A.shape
(2, 2)
>> A.dtype
dtype('int64')
ベクトルと行列とテンソル
1次元配列 → ベクトル
2次元配列 → 行列
ベクトルや行列を一般化したもの→テンソル
ブロードキャスト
行列 [[10, 20], [30, 40]]] とスカラ値 10 の掛け算を行う場合、スカラ値 10 が 2 * 2 の要素に拡大されて([[10, 10], [10, 10]])演算が行われる。この要素を拡大する機能をブロードキャストと言う。
code:python
>> A = np.array(1, 2], [3, 4)
>> A * 10
>> A * np.array(10, 10], [10, 10) # 上と同じ
また、[[1, 2], [3, 4]] * [10, 20] の場合、[10, 20] が [[10, 20], [10, 20]] に拡大されて演算が行われる。
要素へのアクセス
インデックスを使ったアクセス
code:python
>> X = np.array(51, 55], 14, 19, [0, 4) >> print(X)
55
for文を使ったアクセス
code:python
>> for row in X:
... print(row)
...
行列を1次元の配列へ変換してアクセス
code:python
>> X = X.flatten() # Xを1次元の配列に変換
>> print(X)
>> X[np.array(0, 2, 4)] # インデックスが0, 2, 4の要素を取得 # 以下でもいいのでは?
>> X0, 2, 4
この記法を応用して、ある条件を満たす要素だけを取得できる
code:python
>> X > 15
Matplotlib
code:chap1/sin.py
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1) # 0から6まで0.1刻みで生成
y = np.sin(x)
# グラフの描画
plt.plot(x, y)
plt.show()
実行
code:sh
python chap1/sin.py
表示されたグラフ
https://gyazo.com/173712e82bc90b5a2707d71816ff677c
sinとcosを表示
code:chap1/sin_and_cos.py
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 6, 0.1) # 0から6まで0.1刻みで生成
y1 = np.sin(x)
y2 = np.cos(x)
# グラフの描画
plt.plot(x, y1, label="sin")
plt.plot(x, y2, linestyle= "--", label="cos")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend()
plt.show()
https://gyazo.com/3465296807e083784abccffc96110fec
画像を表示
code:chap1/image.py
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('chap1/splatoon.jpg')
plt.imshow(img)
plt.show()
https://gyazo.com/3955d3fdd463fa0e3e0abc3cac33f5ea