numpy和matplotlib (2)
1.矩阵运算
-
运算符:+、-、*、/、//、**、%……
-
abs()
-
sin()
cos()
tan()
-
exp()
log()
-
power()
log2()
log10()
-
dot()
矩阵乘法A * B 只是矩阵各位置相乘,A.dot(B) 才是矩阵乘法
-
A.T
转置 -
inv()
逆矩阵A # array([[0, 1], # [2, 3]]) np.linalg.inv(A) # array([[-1.5, 0.5], # [ 1. , 0. ]])
-
pinv()
伪逆矩阵 (不要求是方阵)C # array([[0, 1, 2], # [3, 4, 5]]) D = np.linalg.pinv(C) # array([[-0.77777778, 0.27777778], # [-0.11111111, 0.11111111], # [ 0.55555556, -0.05555556]]) C.dot(D) # array([[ 1.00000000e+00, -4.16333634e-17], # [ 5.55111512e-16, 1.00000000e+00]])
2.聚合运算
聚合:把一组值变成一个值
-
sum()
X = np.arange(16).reshape((4, 4)) np.sum(X) # 120 np.sum(X, axis=0) # array([24, 28, 32, 36]) np.sum(X, axis=1) # array([ 6, 22, 38, 54])
-
max()
min()
-
prod()
求积 -
mean()
均值 -
median()
中位数 -
percentile()
百分位数L = np.array(np.random.random((10, 10))) np.percentile(L, q = 50) # 0.4706891049878974 for percent in [0, 25, 50, 75, 100]: print(np.percentile(L, q = percent)) # 0.0013510975813705306 # 0.18301899481429829 # 0.4706891049878974 # 0.7229884292204094 # 0.9879405960925149
-
var()
方差std()
标准差
3.arg运算
-
argmin()
argmax()
最小(大)值的索引x = np.random.normal(0, 1, size = 1000) np.min(x) # -2.949169178250681 np.argmin(x) # 42 x[42] # -2.949169178250681
-
sort()
X # array([[5, 8, 9, 3], # [5, 5, 4, 8], # [3, 1, 8, 5], # [9, 3, 4, 7]]) np.sort(X) # 同np.sort(X, axis=1) # array([[3, 5, 8, 9], # [4, 5, 5, 8], # [1, 3, 5, 8], # [3, 4, 7, 9]]) np.sort(X, axis=0) # array([[3, 1, 4, 3], # [5, 3, 4, 5], # [5, 5, 8, 7], # [9, 8, 9, 8]])
-
argsort()
排序后每个数在原数组中的索引x # array([ 4, 10, 14, 8, 9, 12, 1, 6, 1, 6, 11, 3, 10, 10, 10, 2]) np.argsort(x) # 索引为6的数排到第一位 # array([ 6, 8, 15, 11, 0, 7, 9, 3, 4, 1, 12, 13, 14, 10, 5, 2], # dtype=int32)
-
partition()
np.partition(x, 6) # 小于6的排在6前面,大于6的排在6后面 # array([ 1, 2, 3, 1, 4, 6, 6, 8, 9, 10, 10, 10, 10, 11, 14, 12])
-
argpartition()
np.argpartition(x, 6) # array([ 6, 15, 11, 8, 0, 9, 7, 3, 4, 14, 13, 1, 12, 10, 2, 5], # dtype=int32)
4.Fancy indexing
x = np.arange(16)
# 取索引为3,5,8的值可以
[x[3], x[5], x[8]]
# 也可以
ind = [3, 5, 8]
x[ind]
ind = np.array([[0, 2],
[1, 3]])
x[ind]
# 矩阵类似
X = x.reshape(4, -1)
row = np.array([0, 1, 2])
col = np.array([1, 2, 3])
X[row, col] # 取(0, 1), (1, 2), (2, 3)三个点
# array([ 1, 6, 11])
# 另一种方法
col = [True, False, True, True]
X[1:3, col]
# array([[ 4, 6, 7],
# [ 8, 10, 11]])