3. numpy入門

import numpy as np

# 行列の作成
a = np.array([[1,2,3], [4,5,6]])
print(a)
print(type(a))
print(a.shape)
[[1 2 3]
 [4 5 6]]
<class 'numpy.ndarray'>
(2, 3)
#行の参照
a[0]
array([1, 2, 3])
#列の参照
a[:,0]
array([1, 4])
#スライス指定も可能
a[0:2]
array([[1, 2, 3],
       [4, 5, 6]])
a[:,0:2]
array([[1, 2],
       [4, 5]])
# 「行列 + 1」は全要素に対する和を実行
a + 1
array([[2, 3, 4],
       [5, 6, 7]])
# *演算子も同様。
a * 2
array([[ 2,  4,  6],
       [ 8, 10, 12]])
#行列演算ではない!
a * a
array([[ 1,  4,  9],
       [16, 25, 36]])
#転置行列
a.T
array([[1, 4],
       [2, 5],
       [3, 6]])
#内積を求めるにはdot関数を使う
np.dot(a, a.T)
array([[14, 32],
       [32, 77]])
#逆行列
np.linalg.inv(np.dot(a, a.T))
array([[ 1.42592593, -0.59259259],
       [-0.59259259,  0.25925926]])
#ゼロ行列、1行列、対角行列
print(np.zeros((2,3)))

print(np.ones((2,3)))

print(np.eye(3))
[[0. 0. 0.]
 [0. 0. 0.]]
[[1. 1. 1.]
 [1. 1. 1.]]
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
#特定範囲内で幅を指定してサンプル点を用意。
#例えば、
# 「y=x**2」のグラフを描画したいとき、
# 定義域「-10〜10の範囲で0.1刻みでサンプル点を用意」みたいなときに便利。
np.arange(0, 1, 0.3)
array([0. , 0.3, 0.6, 0.9])
#np.arangeで始点、刻み幅を省略すると0から指定個数の整数を用意。
np.arange(8)
array([0, 1, 2, 3, 4, 5, 6, 7])
#行列の形を変形できる。
np.reshape(np.arange(6),(2,3))
array([[0, 1, 2],
       [3, 4, 5]])
#刻み幅はどうでも良いからサンプル数を指定したい場合に便利。
np.linspace(0,2,3)
array([0., 1., 2.])
np.linspace(0,2,4)
array([0.        , 0.66666667, 1.33333333, 2.        ])
#行列を結合できる。
#縦方向に結合
a = np.array([[1,2,3], [4,5,6]])
b = np.array([[7,8,9], [10,11,12]])
np.r_[a, b]
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
#横方向に結合
np.c_[a, b]
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])