Skip to article frontmatterSkip to article content

07-01 NumPy,NumPy配列

NumPy,NumPy配列

01-01. ndarray

# 01-01. ndarray

import numpy as np

a = np.array([1, 2, 3])
b = np.array([6, 3.3, 1])
C = np.array([[1, 5, 6], [7, 8, 9], [4, 2, 3]])
D = np.array([[2.3, 4, 7.2], [7, 9, 1], [11, 2, 9]])

01-02. ndarrayの属性

# 01-02. ndarrayの属性

# 配列の形状
print(a.shape)
print(C.shape)

# 次元
print(b.ndim)
print(D.ndim)

# (要素の)型
print(a.dtype)
print(D.dtype)

# 配列のキャスト
e = a.astype(float)
F = D.astype(int)
print(e)
print(F)
(3,)
(3, 3)
1
2
int64
float64
[1. 2. 3.]
[[ 2  4  7]
 [ 7  9  1]
 [11  2  9]]

01-03. 基本的な演算

# 01-03. 基本的な演算

# 同次元の加算・減算
print("a + b: ", a + b)
print("b - a: ", b - a)
print("C + D: \n", C + D)
print("C - F: \n", C - F)

# 異なる次元の加算・減算
print("a + C: \n", a + C)
print("D - b: \n", D - b)

# 乗算・除算
print("a*b: ", a * b)
print("C/a: \n", C / a)
a + b:  [7.  5.3 4. ]
b - a:  [ 5.   1.3 -2. ]
C + D: 
 [[ 3.3  9.  13.2]
 [14.  17.  10. ]
 [15.   4.  12. ]]
C - F: 
 [[-1  1 -1]
 [ 0 -1  8]
 [-7  0 -6]]
a + C: 
 [[ 2  7  9]
 [ 8 10 12]
 [ 5  4  6]]
D - b: 
 [[-3.7  0.7  6.2]
 [ 1.   5.7  0. ]
 [ 5.  -1.3  8. ]]
a*b:  [6.  6.6 3. ]
C/a: 
 [[1.  2.5 2. ]
 [7.  4.  3. ]
 [4.  1.  1. ]]

01-04. 基本的な関数による演算

# 01-04. 基本的な関数による演算

# 指数
print("a**2: ", a**2)
print("np.exp(2): ", np.exp(2))
print("np.exp(a): ", np.exp(a))

# 対数
print("np.log(2): ", np.log(2))
print("np.log(C): \n", np.log(C))

# 平方根
print("np.sqrt(2): ", np.sqrt(2))
print("np.sqrt(b): ", np.sqrt(b))

# 三角関数
print("np.sin(np.pi/2): ", np.sin(np.pi / 2))
print("np.sin(D): \n", np.sin(D))
print("np.cos(e): ", np.cos(e))
a**2:  [1 4 9]
np.exp(2):  7.38905609893065
np.exp(a):  [ 2.71828183  7.3890561  20.08553692]
np.log(2):  0.6931471805599453
np.log(C): 
 [[0.         1.60943791 1.79175947]
 [1.94591015 2.07944154 2.19722458]
 [1.38629436 0.69314718 1.09861229]]
np.sqrt(2):  1.4142135623730951
np.sqrt(b):  [2.44948974 1.81659021 1.        ]
np.sin(np.pi/2):  1.0
np.sin(D): 
 [[ 0.74570521 -0.7568025   0.79366786]
 [ 0.6569866   0.41211849  0.84147098]
 [-0.99999021  0.90929743  0.41211849]]
np.cos(e):  [ 0.54030231 -0.41614684 -0.9899925 ]

01-05. ベクトル・行列計算

# 01-05. ベクトル・行列計算

# ベクトルの基本演算
print("a+b: ", a + b)
print("a-b: ", a - b)
print("3*a: ", 3 * a)

# ベクトルの内積・外積
print("a.b, np.dot(a,b): ", np.dot(a, b))
print("axb, np.cross(a,b): ", np.cross(a, b))

# 行列の基本演算
print("C+D: \n", C + D)
print("C-D: \n", C - D)
print("2*C: \n", 2 * C)

# 行列の乗算
print("C.a, np.dot(C,a): ", np.dot(C, a))
print("C.D, np.dot(C,D): \n", np.dot(C, D))
print("D.C, np.dot(D,C): \n", np.dot(D, C))
a+b:  [7.  5.3 4. ]
a-b:  [-5.  -1.3  2. ]
3*a:  [3 6 9]
a.b, np.dot(a,b):  15.6
axb, np.cross(a,b):  [-7.9 17.  -8.7]
C+D: 
 [[ 3.3  9.  13.2]
 [14.  17.  10. ]
 [15.   4.  12. ]]
C-D: 
 [[-1.3  1.  -1.2]
 [ 0.  -1.   8. ]
 [-7.   0.  -6. ]]
2*C: 
 [[ 2 10 12]
 [14 16 18]
 [ 8  4  6]]
C.a, np.dot(C,a):  [29 50 17]
C.D, np.dot(C,D): 
 [[103.3  61.   66.2]
 [171.1 118.  139.4]
 [ 56.2  40.   57.8]]
D.C, np.dot(D,C): 
 [[ 59.1  57.9  71.4]
 [ 74.  109.  126. ]
 [ 61.   89.  111. ]]

01-06. 線形代数向け関数

# 01-06. 線形代数向け関数
# 転置行列
print("C^T, C.transpose(): ", C.transpose())
print("C^T, np.transpose(C): ", np.transpose(C))
# 行列式
print("|D|, np.linalg.det(D): ", np.linalg.det(D))
# 逆行列
print("F^-1, np.linalg.inv(F): ", np.linalg.inv(F))
# 固有値・固有ベクトル
print("np.linalg.eig(C): ", np.linalg.eig(C))
print("固有値のみ, np.linalg.eigvals(C): ", np.linalg.eigvals(C))
C^T, C.transpose():  [[1 7 4]
 [5 8 2]
 [6 9 3]]
C^T, np.transpose(C):  [[1 7 4]
 [5 8 2]
 [6 9 3]]
|D|, np.linalg.det(D):  -638.3000000000005
F^-1, np.linalg.inv(F):  [[-0.12248062  0.03410853  0.09147287]
 [ 0.08062016  0.09147287 -0.07286822]
 [ 0.13178295 -0.0620155   0.01550388]]
np.linalg.eig(C):  EigResult(eigenvalues=array([14.72735221, -3.28537742,  0.55802521]), eigenvectors=array([[ 0.43801562,  0.85468529, -0.00703173],
       [ 0.84944136, -0.12913467, -0.76794748],
       [ 0.29426465, -0.50282928,  0.64047421]]))
固有値のみ, np.linalg.eigvals(C):  [14.72735221 -3.28537742  0.55802521]

01-07. その他の便利な関数

# 01-07. その他の便利な関数

# 配列の生成
Z = np.zeros([3, 4])
I = np.identity(3)
r = np.linspace(1, 2, 10)
print("Z: \n", Z)
print("I: \n", I)
print("r: ", r)

# 集約・統計
print("np.max(a)", np.max(a), a)
print("a.max()", a.max(), a)
print("np.min(C)", np.min(C), C)
print("C.min()", C.min(), C)
print("np.sum(b): ", np.sum(b), b)
print("b.sum(): ", b.sum(), b)
print("np.mean(b): ", np.mean(b))
print("b.mean(): ", b.mean(), b)
print("np.median(b): ", np.median(b))
print("np.std(D): ", np.std(D))
Z: 
 [[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
I: 
 [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
r:  [1.         1.11111111 1.22222222 1.33333333 1.44444444 1.55555556
 1.66666667 1.77777778 1.88888889 2.        ]
np.max(a) 3 [1 2 3]
a.max() 3 [1 2 3]
np.min(C) 1 [[1 5 6]
 [7 8 9]
 [4 2 3]]
C.min() 1 [[1 5 6]
 [7 8 9]
 [4 2 3]]
np.sum(b):  10.3 [6.  3.3 1. ]
b.sum():  10.3 [6.  3.3 1. ]
np.mean(b):  3.4333333333333336
b.mean():  3.4333333333333336 [6.  3.3 1. ]
np.median(b):  3.3
np.std(D):  3.3973846149975753