Jupyter Notebook ショートカット

Command Mode (cell が選択されていない状態) で h を押すか、Help -> Keyboard shortcuts を押すとショートカットの一覧が表示される。

Jupyter Notebook は Command Mode (press Esc) と Edit Mode (press Enter) に分かれており、それぞれで使えるショートカットキーが異なる。

# 編集中セルの下に新しいセルを挿入
ESC + B

# 編集中セルの上に新しいセルを挿入
ESC + A

# 編集中セルを削除
ESC + D, D

Numpy の配列アクセス方法

a = np.arange(18).reshape(2, 3, 3)
という指定を行うと、下記のような 18個の (2, 3, 3) 配列が返る。

a もしくは a[:, :, :] でアクセスする。[:, :, :] って凄い指定の仕方。。

array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]]])

この結果に対して a[0] もしくは a[0, :, :] でアクセスすると

array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

a[1][0] もしくは a[1, :, :] にアクセスすると、

array([ 9, 10, 11])

になる。

配列の範囲指定 [:]

[:, :, :] は範囲指定を行える。[begin:end] 指定。t = np.arange([2, 3, 4, 5, 6, 7]) で t[2:5] とした場合は、index が 2, 3, 4 までの値 array([4, 5, 6]) が返る。

a と a[:, :, :] と a[0:2, 0:3, 0:3] は全て同じ結果になる。a[0, :, :] にアクセスすると [[ 0, 1, 2], [3, 4, 5], [6, 7, 8]] が返る。a[:, 1, :] にアクセスすると [[ 3, 4, 5], [12, 13, 14]] が返る。3次元配列の 2つ目が 1 で固定されるため。a[:, :, 0] にアクセスすると [[ 0, 3, 6], [ 9, 12, 15]] が返る。3要素のベクトルの先頭 [0] のみが返るため。

最後の要素にアクセス

a[-1, -1, -1] という風に -1 を指定すると、値としては 17 が帰ってくる。-1 は配列要素の最後の要素。

転置行列

a.transpose(0, 2, 1) という風に transpose() と入れ替える軸を指定すると、この結果は下記になる。1, 2 -> 2, 1 に順番にしたので転置されてる。

array([[[ 0,  3,  6],
        [ 1,  4,  7],
        [ 2,  5,  8]],

       [[ 9, 12, 15],
        [10, 13, 16],
        [11, 14, 17]]])

一次元化

a.flatten() 命令を使用すると、ndim 1 の 1次元ベクトルになる。

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17])

よく使う Numpy の関数

np.random.randn()

平均 0, 分散 1 の正規分布 (normal distribution) に従う乱数値を返す。引数には任意の次元を指定できる。randn(d0, d1, …, dn) を指定することができ、仮に randn(2, 2) とすれば、4つの乱数が返る。

np.zeros()

0 で初期化された配列を返す。zeros((2,2)) とすれば、要素4つ、shape が (2,2) ndim 2 の配列が返す。

np.random.choice()

第一引数は乱数の最大値、第二引数は個数。(5, 20) と引数に指定した場合は、5 以下 (0~4) までの乱数が 20 個返る。

np.pad()

指定した変数の前後にパディングを追加出来る。np.pad([5,6], (2, 3), ‘constant’) みたいに指定すれば、array([0, 0, 5, 6, 0, 0, 0]) という要素が返る。5 の前に 2個、6 の後に 3個のパディングが追加される。

Numpy 覚書

import numpy as np

# 10個の連続する値を確保
a = np.arange(10)
=> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

# 2次元配列の確保
a = np.arange(10).reshape(2, 5)
=> [[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]]

# 多次元配列
a = np.arange(40).reshape(5, 2, 2, 2)
[ [[[0,1], [2,3]], [[4,5],[6,7]]], [[[8,9],[10,11]],…..

a[0][0][0][0] => 0
a[0][0][0][1] => 1
a[0][0][1][0] => 2
a[0][1][0][0] => 4
a[1][0][0][0] => 8

NumPy ndarray と MINIST のサイズ

Keras で (x_train, ) , (x_test, ) = mnist.load_data() などで読み込んだ MINIST データは type(x_train) で表示させてみると numpy.ndarray 型であることが分かり、x_train.shape などで次元の大きさを確認することが出来る。

x_train.shape をやってみると (60000, 784) のサイズになる。28×28=784 次元の画像が 60000 個存在する。