Skip to content

機械学習で使うNumpy

Posted in メモ

Numpyのインポート

numpy を利用するには、事前にライブラリのインポート(import) を行う必要があります。

numpy のインポートには、慣習として別名で np を指定します。

import numpy as np

機械学習で使うNumpyメソッド

numpy.array

numpy配列(ndarray型)を生成します。

この型で作成された配列は、リストとは異なり、ベクトルの演算、特に内積計算を行うことができます。


第一引数に、配列形式のオブジェクト(リストやタプル)を指定します。

dtype を引数としてしていることもでき、効率のよい演算処理を行いたい場合はこれを指定するようにします。

import numpy as np

list1 = [5, 15, 16]
list2 = [5, 5, 4]

arr1 = np.array(list1)
arr2 = np.array(list2)

arr3 = arr1 + arr2

# 行列の計算が行われ、[10 20 20] と結果が表示される
print(arr3)

# リストでは、行列計算が行われず [5, 15, 16, 5, 5, 4] と表示される
list3 = list1 + list2
print(list3)

numpy.reshape

配列の形状を変更します。

第一引数に変換対象の配列を指定し、第二引数に変後の形状をリストやタプル形式で指定します。


引数として -1 を指定することもでき、その場合自動的に適当な値に変換され形状変換が行われます。

import numpy as np

arr1 = np.array([[5, 15, 16], [5, 5, 4]])

arr2 = np.reshape(arr1, (3, 2))

# [[ 5 15]
# [16  5]
# [5  4]] と表示される
print(arr2)

arr3 = np.reshape(arr1, (-1, 6))

# [[ 5 15 16  5  5  4]] と表示される
print(arr3)

numpy.random.randn

平均が 0 標準偏差が 1 の標準正規分布に従った乱数で初期化された配列を自動生成します。

第一引数に、一次元目の要素数、第二引数に、二次元目の要素数・・・第N引数に。第N元目の要素数を指定します。

import numpy as np

arr1 = np.random.randn(2, 3, 4)

# [[[-0.06938809 - 0.56313467  1.14658044  1.56612232]
#   [-0.82757435 - 0.46248741  0.02694717  0.04772977]
#   [-1.5600088   1.17137549  0.2212936   1.85260828]]
#
#  [[0.52669363  0.87712619  0.36358062 - 0.30756914]
#   [-1.19961115 - 0.48325861  0.42533143  0.23027749]
#   [-0.16304842  0.2178413   0.93108431  1.35406298]]]
print(arr1)

numpy.zeros

すべての要素を0で初期化した配列を生成します。

第一引数に配列の形状を指定します。

import numpy as np

arr1 = np.zeros((2, 3, 4))

# [[[0.  0.  0.  0.]
#   [0.  0.  0.  0.]
#  [0.  0.  0.  0.]]
# 
#  [[0.  0.  0.  0.]
#   [0.  0.  0.  0.]
#   [0.  0.  0.  0.]]]
print(arr1)

numpy.dot

配列のドット積(内積)を計算します。

第一引数および第二引数に計算の対象とする配列を指定します。

このとき計算する順序に基づき、引数の指定に気をつけるようにしてください。

import numpy as np

# (2, 3)のnumpy配列
arr1 = np.array([[2, 3, 4], [5, 6, 7]])
# (3, 2)のnumpy配列
arr2 = np.array([[1, 2], [3, 4], [5, 6]])

# [[31 40]
#  [58 76]]
print(np.dot(arr1, arr2))

# [[12 15 18]
#  [26 33 40]
#  [40 51 62]]
print(np.dot(arr2, arr1))

numpy.exp

底が e の累乗計算を行います。

import numpy as np

# つまり、eの2乗のこと
np.exp(2)

# つまり、eの-1乗のこと
np.exp(-1)

numpy.log

底が e の対数計算を行います。

import numpy as np

# 底をe、真数を2とした数
np.log(2)

# 底をe、真数をeとした数(つまりは1)
np.log(np.exp(1))

numpy.max

指定された配列内の最大値を返します。

第一引数に、対象とする配列を指定します。


また、オプションとして axis(軸)を指定することができます。

軸と言ってもイメージがしづらいのですが、N次元のうちの一つの次元だと考えてください。

二次元であるなら、軸は縦と横の二つの軸が考えられます。


下記のサイトで、axisについて検証をされていますので、動作について気になる方は除いてみてください。

NumPyでのaxis指定

import numpy as np

arr1 = np.array([[1, 2], [3, 4], [5, 6]])

# 最大値 6 が出力される
print(np.max(arr1))

# [5 6] が出力される
print(np.max(arr1, axis=0))

# [2 4 6] が出力される
print(np.max(arr1, axis=1))

numpy.argmax

指定した配列内にある最大値のインデックスを返します。

import numpy as np

arr1 = np.array([[1, 2], [3, 4], [5, 6]])

# 最大値 5 が出力される
print(np.argmax(arr1))

# [2 2] が出力される
print(np.argmax(arr1, axis=0))

# [1 1 1] が出力される
print(np.argmax(arr1, axis=1))

numpy.maximum

指定した2つの配列の対応する要素を比較し、各対応要素ごとの大きい方の値を出力します。

import numpy as np

arr1 = np.array([5, 15, 16])
arr2 = np.array([5, 5, 4])

# [5 15 16] と出力される
print(np.maximum(arr1, arr2))

numpy.square

2乗の計算を行います。

第一引数に計算を行いたい配列を指定します。

import numpy as np

arr1 = np.array([5, 15, 16])

# [25 225 256] と出力される
print(np.square(arr1))

numpy.mean

平均を計算します。

第一引数に計算を行いたい配列を指定します

import numpy as np

arr1 = np.array([5, 15, 16])

# 12.0 と出力される
print(np.mean(arr1))

numpy.sum

合計の計算を行います。

第一引数に計算を行いたい配列を指定します。

import numpy as np

arr1 = np.array([5, 15, 16])

# 36 と出力される
print(np.sum(arr1))

Be First to Comment

コメントを残す