numpy & scipy 備忘録
概要
- メモ程度ですが,簡単にまとめていきます
- 随時更新していきます(たぶん)
numpy 備忘録
自己共分散行列
>>> x = np.array([[0, 2], [1, 1], [2, 0]]).T
>>> y = np.cov(x)
>>> y
array([[ 1., -1.],
[-1., 1.]])
>>> y = np.cov(x,rowvar = 0)
>>> y
array([[ 2., 0., -2.],
[ 0., 0., 0.],
[-2., 0., 2.]])
平均
>>> a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis=0)
array([ 2., 3.])
>>> np.mean(a, axis=1)
array([ 1.5, 3.5])
行列の固有値固有ベクトル
eigVals,eigVecs = np.linalg.eig(np.mat(Mat))
行列の連結
>>> a = np.array([[1, 2], [3, 4]])
>>> b = np.array([[5, 6]])
>>> np.concatenate((a, b), axis=0)
array([[1, 2],
[3, 4],
[5, 6]])
>>> np.concatenate((a, b.T), axis=1)
array([[1, 2, 5],
[3, 4, 6]])
行列の次元変換
>>> x = np.arange(4).reshape((2,2))
>>> x
array([[0, 1],
[2, 3]])
>>> np.transpose(x)
array([[0, 2],
[1, 3]])
>>> x = np.ones((1, 2, 3))
>>> np.transpose(x, (1, 0, 2)).shape
(2, 1, 3)
サイズ1の次元の削除
>>> x = np.array([[[0], [1], [2]]])
>>> x.shape
(1, 3, 1)
>>> np.squeeze(x).shape
(3,)
>>> np.squeeze(x, axis=(2,)).shape
(1, 3)
クロネッカー積
>>> np.kron([1,10,100], [5,6,7])
array([ 5, 6, 7, 50, 60, 70, 500, 600, 700])
>>> np.kron([5,6,7], [1,10,100])
array([ 5, 50, 500, 6, 60, 600, 7, 70, 700])
単位行列作成(identityは正方行列,eyeはオプションで色々指定できる)
>>> np.identity(3)
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.eye(2, dtype=int)
array([[1, 0],
[0, 1]])
>>> np.eye(3, k=1)
array([[ 0., 1., 0.],
[ 0., 0., 1.],
[ 0., 0., 0.]])
>>> np.eye(3, 2)
array([[ 1., 0.],
[ 0., 1.],
[ 0., 0.]])
重複するものを除く
インデックスを返す
>>> a = np.array(['a', 'b', 'b', 'c', 'a'])
>>> u, indices = np.unique(a, return_index=True)
>>> u
array(['a', 'b', 'c'],
dtype='|S1')
>>> indices
array([0, 1, 3])
>>> a[indices]
array(['a', 'b', 'c'],
dtype='|S1')
再構成用にインデックスを返す
>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> u, indices = np.unique(a, return_inverse=True)
>>> u
array([1, 2, 3, 4, 6])
>>> indices
array([0, 1, 4, 3, 1, 2, 1])
>>> u[indices]
array([1, 2, 6, 4, 2, 3, 2])
arrayをある範囲に指定する
>>> a = np.arrange(1,2,3,4,5)
>>> np.clip(a,a_min=2,a_max=4)
array([2,2,3,4,4])
scipy 備忘録
特異値分解
full_matrices=True:U,V正方行列,False:s正方行列
>>> U,s,V = scipy.linalg.svd(A, full_matrices=False, check_finite=False)