小知识:
array:数组,多维
matrix:矩阵或方阵,只能是二维数据(并且行列要长度要相等),继承于array
dot
'''一维与一维:点积'''
x=np.array([1,2])
y=np.array([3,4])
print(x.dot(y)) >>>11
'''高维与高维(or一维):矩阵乘积'''
x=np.array([[1, 2, 3], [4, 5, 6]])
y=np.array([[1, 4], [2, 5], [3, 6]])
print(x.dot(y)) >>>[[14 32],[32 77]]
'''numpy.linalg模块包含线性代数的函数'''
A=np.matrix([[0,1,2],[1,0,3],[4,-3,8]])
inv 方阵求逆矩阵
'''
print(A)
inv = np.linalg.inv(A)
print(inv)
print('---------------判断是否可逆-----------')
print(A * inv) #注意matrix的*为dot
[[ 0 1 2]
[ 1 0 3]
[ 4 -3 8]]
[[-4.5 7. -1.5]
[-2. 4. -1. ]
[ 1.5 -2. 0.5]]
---------------判断是否可逆-----------
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
'''
det 方阵行列式
'''
print(np.linalg.det(array)) >>>-2.0
'''
eig 方阵的特征值与特征向量
'''
返回值
w:特征值。每个特征值根据它的多重性重复。这个数组将是复杂类型,除非虚数部分为0。当传进的参数a是实数时,得到的特征值是实数。
v:特征向量。
print(np.linalg.eig(A))
(array([ 7.96850246, -0.48548592, 0.51698346]),
matrix([[ 0.26955165, 0.90772191, -0.74373492],
[ 0.36874217, 0.24316331, -0.65468206],
[ 0.88959042, -0.34192476, 0.13509171]]))
'''
svd 奇异值分解
'''
参数:
a是一个形如(M,N)矩阵
full_matrices的取值是为0或者1,默认值为1,这时u的大小为(M,M),v的大小为(N,N) 。
否则u的大小为(M,K),v的大小为(K,N) ,K=min(M,N)。
compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。
返回值:U和V是正交矩阵,Sigma包含输入矩阵的奇异值。
U,sigma,VT=np.linalg.svd(A,full_matrices=False)
print(U)
[[-0.1478939 -0.84354284 -0.51629727]
[-0.30264738 -0.4583935 0.83563148]
[-0.94155826 0.27984081 -0.18750242]]
print(sigma)
[10.00210302 1.98690899 0.1006377 ]
print(VT)
[[-0.40680249 0.26762181 -0.87343592]
[ 0.33266232 -0.84707719 -0.41448283]
[ 0.85079229 0.45917187 -0.25556542]]
'''
qr qr分解
'''
q,r=np.linalg.qr(A)
print(q)
[[ 0. -0.80860754 -0.58834841]
[-0.24253563 -0.57078179 0.78446454]
[-0.9701425 0.14269545 -0.19611614]]
print(r)
[[-4.12310563 2.9104275 -8.48874688]
[ 0. -1.23669388 -2.18799687]
[ 0. 0. -0.39223227]]
'''
pinv 计算广泛伪逆矩阵