numpy中计算矩阵数值的核心函数

举报
tsinghuazhuoqing 发表于 2022/01/18 00:33:11 2022/01/18
【摘要】 简 介: 关键词: 矩阵,分解,QR ...

简 介:

关键词 矩阵分解QR

矩阵的迹
目 录
Contents
定义
性质
相关函数
QR分解
定义
分解举例
特殊矩阵
空矩阵
零矩阵
1矩阵
对角线矩阵
随机矩阵

 

§01 阵的迹


1.1 定义

  对于方形矩阵 A A A 是一个 K × K K \times K K×K 的矩阵,它的,记为 t r a c e ( A ) trace\left( A \right) trace(A) ,或者 t r ( A ) tr\left( A \right) tr(A) 定义为矩阵对角线元素累加和: t r ( A ) = ∑ k = 1 K A k k tr\left( A \right) = \sum\limits_{k = 1}^K {A_{kk} } tr(A)=k=1KAkk

  例如下面的矩阵: A = [ 2 1 5 2 3 4 0 1 0 ] A =

220131540 [ 2 1 5 2 3 4 0 1 0 ]
A=220131540
t r ( A ) = A 11 + A 22 + A 33 = 2 + 3 + 0 = 5 tr\left( A \right) = A_{11} + A_{22} + A_{33} = 2 + 3 + 0 = 5 tr(A)=A11+A22+A33=2+3+0=5

1.2 性质

t r ( A + B ) = t r ( A ) + t r ( B ) tr\left( {A + B} \right) = tr\left( A \right) + tr\left( B \right) tr(A+B)=tr(A)+tr(B)
t r ( a A ) = a ⋅ t r ( A ) tr\left( {aA} \right) = a \cdot tr\left( A \right) tr(aA)=atr(A)
t r ( α A + β B ) = α ⋅ t r ( A ) + β ⋅ t r ( B ) tr\left( {\alpha A + \beta B} \right) = \alpha \cdot tr\left( A \right) + \beta \cdot tr\left( B \right) tr(αA+βB)=αtr(A)+βtr(B)
t r ( A T ) = t r ( A ) tr\left( {A^T } \right) = tr\left( A \right) tr(AT)=tr(A)
t r ( A B ) = t r ( B A ) tr\left( {AB} \right) = tr\left( {BA} \right) tr(AB)=tr(BA)
A B = t r ( A B ) = t r ( B A ) AB = tr\left( {AB} \right) = tr\left( {BA} \right) AB=tr(AB)=tr(BA)

1.3 相关函数

1.3.1 调用函数形式

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *

A = array([[1,2,3],[4,5,6],[7,8,9]])
print("trace(A): {}\n".format(trace(A)))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
trace(A): 15

  
 
  • 1

1.3.2 利用迹计算两个矩阵的内积

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *

A = random.randn(15,8)
B = random.randn(15,8)

C = A.T.dot(B)
print("trace(C): {}\n".format(trace(C)))
print("sum(A*B): {}\n".format(sum(A*B)))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
trace(C): -9.301644996885578
sum(A*B): -9.301644996885576

  
 
  • 1
  • 2

 

§02 QR分解


2.1 定义

  对于矩阵 A,可以将其表示成: A = Q ⋅ R A = Q \cdot R A=QR 。其中 Q Q Q 是正交矩阵, R R R 是上三角矩阵。

2.2 分解举例

  分解一个5×3随机矩阵。

import sys,os,math,time
import matplotlib.pyplot as plt
from numpy import *

A = random.randn(5,3)
print("A: {}\n".format(A))
q,r = linalg.qr(A)
print("q: {}\n".format(q),"r: {}\n".format(r))

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
A: [[-1.86374906 -1.14492839  0.25085956]
[ 0.84097176  0.47786409  0.63319386]
[-1.2215861  -0.84129822 -0.68549399]
[ 0.14952506 -1.41793941 -0.28392431]
[-0.7815916  -1.56835016 -0.23617405]]
q: [[-0.74216383  0.11278664  0.58823716]
[ 0.33488351 -0.07192668  0.58284231]
[-0.48644801  0.02461369 -0.55319958]
[ 0.0595424  -0.8284496  -0.04030384]
[-0.31123773 -0.54329656  0.08134932]]
r: [[2.51123671 1.82270331 0.41592522]
[0.         1.84255932 0.32940707]
[0.         0.         0.88806271]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

  可以验证 q 矩阵是正交矩阵:

print("q.T.dot(q): {}\n".format(q.T.dot(q)))

  
 
  • 1
q.T.dot(q): [[1.00000000e+00 3.84861072e-17 2.96333633e-16]
[3.84861072e-17 1.00000000e+00 8.91050746e-17]
[2.96333633e-16 8.91050746e-17 1.00000000e+00]]

  
 
  • 1
  • 2
  • 3

 

§03 殊矩阵


3.1 空矩阵

n = empty((5,5))
print("n: {}\n".format(n))

  
 
  • 1
  • 2
n: [[3.42247464e-316 3.42249708e-316 3.42250182e-316 3.06800300e-316
3.42251605e-316]
[3.42252079e-316 3.42252553e-316 3.42253028e-316 3.42253502e-316
3.06797454e-316]
[3.42253976e-316 3.42254925e-316 3.42250656e-316 3.42251130e-316
3.42248759e-316]
[3.06797928e-316 3.06800774e-316 3.06799351e-316 3.06798403e-316
3.06798877e-316]
[3.06794608e-316 3.06796505e-316 3.06796980e-316 3.42254451e-316
1.04878799e+248]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3.2 零矩阵

n = zeros((5,5))
print("n: {}\n".format(n))

  
 
  • 1
  • 2
n: [[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3.3 1矩阵

n = ones((5,5))
print("n: {}\n".format(n))

  
 
  • 1
  • 2
n: [[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

3.4 对角线矩阵

n = eye(3,4,0)
print("n:\n{}".format(n))

  
 
  • 1
  • 2
n:
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]]

  
 
  • 1
  • 2
  • 3
  • 4
n = eye(3,4,1)
print("n:\n{}".format(n))

  
 
  • 1
  • 2
n:
[[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]

  
 
  • 1
  • 2
  • 3
  • 4
n = eye(3,4,-1)
print("n:\n{}".format(n))

  
 
  • 1
  • 2
n = diag([1,2,3,4])
print("n:\n{}".format(n))

  
 
  • 1
  • 2
n:
[[1 0 0 0]
[0 2 0 0]
[0 0 3 0]
[0 0 0 4]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

▲ 图3.4.1  Matrix Diagnoal

▲ 图3.4.1 Matrix Diagnoal

3.5 随机矩阵

n = random.random((5,4))
print("n:\n{}".format(n))

  
 
  • 1
  • 2
n:
[[0.01356284 0.90473283 0.97940574 0.28104009]
[0.47466198 0.27617192 0.74221122 0.20462867]
[0.34521728 0.46786105 0.24819072 0.71578562]
[0.51775933 0.51530835 0.06254809 0.92659839]
[0.30551515 0.60956763 0.43818475 0.31937707]]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6


■ 相关文献链接:

● 相关图表链接:

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/122531852

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。