numpy矩阵

     1.矩阵简介  

        numpy中包含一个矩阵库 numoy.matlib ,该模块的函数返回一个矩阵,而不是ndarry对象。一个m*n的矩阵是一个由m行(row)n列(column)元素排列而成的矩形阵列。

        矩阵matrix和数组arry存在一定的区别和联系

 

 2.矩阵操作

1)矩阵转置

numpy中常用矩阵对象的T属性实现转置操作。

(x.T,y.T,sep='\n\n')

2)矩阵乘法

        在线性代数中,一个m*p矩阵A和一个p*n矩阵B的乘积为一个m*n矩阵。其中,结果矩阵中每个元素Cij的值等于A矩阵中第i行和B矩阵中第j列的内积。


x=np.matrix([[1,2,3],[4,5,6]])
y=np.matrix([[1,2],[3,4],[5,6]])
print(x*y)
# [[22 28]
# [49 64]]

 3.相关系数矩阵

         np.corrcof()函数可以计算相关系数矩阵

A=np.matrix([1,2,3,4])
B=np.matrix([4,3,2,1])
C=np.matrix([1,2,3,40])
D=np.matrix([4,3,2,10])
print('负相关,变化方向相反:',np.corrcoef(A,B)) 
print('负相关,变化方向接近相反:',np.corrcoef(A,D))   
print('正相关,变化方向相近:',np.corrcoef(A,C))  
print('正相关,变化方向一致:',np.corrcoef(A,A)) 


 
# 负相关,变化方向相反: [[ 1. -1.]
# [-1.  1.]]
# 负相关,变化方向接近相反: [[1.         0.61065803]
# [0.61065803 1.        ]]
# 正相关,变化方向相近: [[1.        0.8010362]
# [0.8010362 1.       ]]
# 正相关,变化方向一致: [[1. 1.]
# [1. 1.]]

4.方差、协方差、标准差

print("单变量协方差、方差:",np.cov(A))  
print("两变量协方差:",np.cov(A,B))
print("单变量标准差:",np.std(A))
print("单变量行元素标准差:",np.std(A,axis=1))


# 单变量协方差、方差: 1.6666666666666665
# 两变量协方差: [[ 1.66666667 -1.66666667]
# [-1.66666667  1.66666667]]
# 单变量标准差: 1.118033988749895
# 单变量行元素标准差: [[1.11803399]]

 5.特征值与特征向量

        numpy中线性代数子模块linalg提供了计算特征值和特征向量的eig()函数,参数可以是python列表、numpy数组或numpy矩阵

        

A=np.matrix([[1,-3,3],[3,-5,3],[6,-6,4]])
e,v=np.linalg.eig(A)
print("特征值:",e,sep='\n')
print("特征向量:",v,sep="\n")
print("矩阵与特征向量的乘积:",np.dot(A,v))
print("特征值与特征向量的乘积:",e*v)
print("验证二者是否相等:",np.isclose(np.dot(A,v),e*v))
#特征值:
#[ 4.+0.00000000e+00j -2.+1.10465796e-15j -2.-1.10465796e-15j]
#特征向量:
#[[-0.40824829+0.j          0.24400118-0.40702229j  0.24400118+0.40702229j]
# [-0.40824829+0.j         -0.41621909-0.40702229j -0.41621909+0.40702229j]
# [-0.81649658+0.j         -0.66022027+0.j         -0.66022027-0.j        ]]
#矩阵与特征向量的乘积: [[-1.63299316+0.00000000e+00j -0.48800237+8.14044580e-01j
#  -0.48800237-8.14044580e-01j]
# [-1.63299316+0.00000000e+00j  0.83243817+8.14044580e-01j
#   0.83243817-8.14044580e-01j]
# [-3.26598632+0.00000000e+00j  1.32044054-5.55111512e-16j
#   1.32044054+5.55111512e-16j]]
# 特征值与特征向量的乘积: [[0.81649658+4.50974724e-16j 3.12888345-8.14044580e-01j
#  3.12888345+8.14044580e-01j]]
#验证二者是否相等: [[False False False]
# [False False False]
# [False False False]]

 6.逆矩阵

A=np.matrix([[1,2],[3,4]])
B=np.linalg.inv(A)
print ("逆矩阵:\n",B)
print("AB乘积(对角线元素为1,其余近似为0):\n",A*B)
逆矩阵:
# [[-2.   1. ]
# [ 1.5 -0.5]]
#AB乘积(对角线元素为1,其余近似为0):
# [[1.0000000e+00 0.0000000e+00]
# [8.8817842e-16 1.0000000e+00]]

 7.范数

 

A=np.matrix([[1,2],[3,4]])
print("矩阵2-范数:",np.linalg.norm(A))
print("矩阵最小奇异值:",np.linalg.norm(A,-2))
print("min(sum(abx),axis=0)=",np.linalg.norm(A,-1))
print("max(sum(abx),axis=0)=",np.linalg.norm(A,1))
print("向量中非0元素个数:",np.linalg.norm([1,2,0,3,4,0],0))
print("向量2-范数:",np.linalg.norm([1,2,0,3,4,0],2))
# 矩阵2-范数: 5.477225575051661
# 矩阵最小奇异值: 0.36596619062625746
# min(sum(abx),axis=0)= 4.0
# max(sum(abx),axis=0)= 6.0
# 向量中非0元素个数: 4.0
# 向量2-范数: 5.477225575051661

8.奇异值分解

 

A=np.matrix([[1,2,3],[4,5,6],[7,8,9]])
u,s,v=np.linalg.svd(A)
print("u=",u)
print("s=",s)
print("v=",v)
#u= [[-0.21483724  0.88723069  0.40824829]
# [-0.52058739  0.24964395 -0.81649658]
# [-0.82633754 -0.38794278  0.40824829]]
#s= [1.68481034e+01 1.06836951e+00 4.41842475e-16]
#v= [[-0.47967118 -0.57236779 -0.66506441]
# [-0.77669099 -0.07568647  0.62531805]
# [-0.40824829  0.81649658 -0.40824829]]

u*np.diag(s)*v
matrix([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值