NumPy 入門
NumPy のメインオブジェクトは homogeneous な配列である. homogeneous な配列とは, ひとつの配列のなかに複数のデータタイプを持たないという意味で均質な配列である, ということである.
NumPy の array は ndarray とよばれる.
ndarray の基本
# import
import numpy as np
arr = [[1, 2], [3, 4]]
# ndarray を作る
a = np.array(arr)
a
array([[1, 2],
[3, 4]])
# 次元数
a.ndim
2
# 行と列を tuple で返す
a.shape
(2, 2)
# 要素数
a.size
4
# array のデータ型
a.dtype
dtype('int64')
a.data
<read-write buffer for 0x104a04a80, size 32, offset 0 at 0x104a10b30>
numpy.array
numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
ndarray を作るとき, dtype プロパティにデータ型を指定することができる.
データ型は以下を参照.
a = np.array([1, 3], dtype=float)
a.dtype
dtype('float64')
numpy.zeros, numpy.ones
numpy.zeros(shape, dtype=float, order='C')
shape を引数とし, すべての要素を 0 (ones の場合は 1) とするような関数が存在する.
np.zeros([2,2], dtype=int)
array([[0, 0],
[0, 0]])
np.ones([2,2], dtype=int)
array([[1, 1],
[1, 1]])
np.empty([2,2])
array([[ 0.00000000e+000, 0.00000000e+000],
[ 1.48219694e-323, 0.00000000e+000]])
numpy.identity
numpy.identity(n, dtype=None)
単位行列を作る
np.identity(4)
array([[ 1., 0., 0., 0.],
[ 0., 1., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 0., 1.]])
numpy.arange
numpy.arange([start, ]stop, [step, ]dtype=None)
連番や等差数列を作る
np.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.arange(1, 11)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
np.arange(5, 100, 5)
array([ 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85,
90, 95])
numpy.linspace
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
等間隔な数列を作る
np.linspace(0, 1)
array([ 0. , 0.02040816, 0.04081633, 0.06122449, 0.08163265,
0.10204082, 0.12244898, 0.14285714, 0.16326531, 0.18367347,
0.20408163, 0.2244898 , 0.24489796, 0.26530612, 0.28571429,
0.30612245, 0.32653061, 0.34693878, 0.36734694, 0.3877551 ,
0.40816327, 0.42857143, 0.44897959, 0.46938776, 0.48979592,
0.51020408, 0.53061224, 0.55102041, 0.57142857, 0.59183673,
0.6122449 , 0.63265306, 0.65306122, 0.67346939, 0.69387755,
0.71428571, 0.73469388, 0.75510204, 0.7755102 , 0.79591837,
0.81632653, 0.83673469, 0.85714286, 0.87755102, 0.89795918,
0.91836735, 0.93877551, 0.95918367, 0.97959184, 1. ])
np.linspace(1, 50)
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.,
12., 13., 14., 15., 16., 17., 18., 19., 20., 21., 22.,
23., 24., 25., 26., 27., 28., 29., 30., 31., 32., 33.,
34., 35., 36., 37., 38., 39., 40., 41., 42., 43., 44.,
45., 46., 47., 48., 49., 50.])
np.linspace(10, 50, 5)
array([ 10., 20., 30., 40., 50.])
numpy.reshape
numpy.reshape(a, newshape, order='C')
array (ndarray) の shape を変換する.
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a.shape)
a
(3, 2)
array([[1, 2],
[3, 4],
[5, 6]])
a.reshape(-1,)
array([1, 2, 3, 4, 5, 6])
a.reshape([2, 3])
array([[1, 2, 3],
[4, 5, 6]])
ndarray の参照
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a[0])
print(a[0][0])
# 行, 列の直接指定
print(a[0, 0])
# スライス
print(a[1:2])
print(a[1:])
print(a[:1])
[1 2 3]
1
1
[[4 5 6]]
[[4 5 6]]
[[1 2 3]]
# True, False による配列の指定 (True である箇所が表示される)
b = a > 3
print(b)
print(a[b])
[[False False False]
[ True True True]]
[4 5 6]
numpy.sort
numpy.sort(a, axis=-1, kind='quicksort', order=None)
配列がソートされる
a = np.random.random(10)
a
array([ 0.30059093, 0.39776416, 0.03569461, 0.32814799, 0.00305144,
0.33298982, 0.37045668, 0.35102445, 0.7594396 , 0.35020994])
# 昇順
np.sort(a)
array([ 0.00305144, 0.03569461, 0.30059093, 0.32814799, 0.33298982,
0.35020994, 0.35102445, 0.37045668, 0.39776416, 0.7594396 ])
# 降順
np.sort(a)[::-1]
array([ 0.7594396 , 0.39776416, 0.37045668, 0.35102445, 0.35020994,
0.33298982, 0.32814799, 0.30059093, 0.03569461, 0.00305144])
ndarray の演算
Universal Function とよばれる.
numpy.add
numpy.add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'add'>
行列の足し算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
np.add(a, b)
array([5, 7, 9])
a + b
array([5, 7, 9])
numpy.subtract
numpy.subtract(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])
行列の引き算
np.subtract(b, a)
array([3, 3, 3])
b - a
array([3, 3, 3])
numpy.multiply
numpy.multiply(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])
行列の掛け算
np.multiply(a, b)
array([ 4, 10, 18])
a * b
array([ 4, 10, 18])
numpy.divide
numpy.divide(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])
行列の割り算
a = np.array([1, 2, 3])
b = np.array([0.1, 0.2, 0.3])
np.divide(a, b)
array([ 10., 10., 10.])
a / b
array([ 10., 10., 10.])
その他の Universal Function (ufunc)
ndarray の要約関数
a = np.array([1, 2, 3])
# 合計
a.sum()
6
# 平均
a.mean()
2.0
# 最大値
a.max()
3
# 最小値
a.min()
1
# 分散
a.var()
0.66666666666666663