Numpy_线性代数

小知识:

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   计算广泛伪逆矩阵

猜你喜欢

转载自blog.csdn.net/rookie_is_me/article/details/87932638