数据分析学习笔记(四)-- numpy:线性代数

常用的linalg函数

函数 说明
diag 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
dot 标准矩阵乘法
trace 计算对角线元素的和
det 计算矩阵行列式
eigvals 计算矩阵的特征值
eig 计算方阵的特征值和特征向量
inv 计算方阵的逆
pinv 计算矩阵的Moore-Penrose伪逆
qr 计算QR分解
svd 计算奇异值分解(SVD)
solve 解线性方程组Ax=b,其中A为一个方阵
lstsq 计算Ax=b的最小二乘解
  • diag
# diag
x = np.arange(9).reshape((3,3))
print(x)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]'''
# 取对角线上的数据
print(np.diag(x))
'''[0 4 8]'''
# k>0,主对角线之上
print(np.diag(x, k=1))
'''[1 5]'''
# k<0,主对角线之下
print(np.diag(x, k=-1))
'''[3 7]'''
# 通过对角线上的数据数组创建矩阵
print(np.diag(np.diag(x)))
'''[[0 0 0]
 [0 4 0]
 [0 0 8]]
 '''
  • dot : 矩阵乘法
# dot
A = np.arange(9).reshape((3,3))
print(A)
'''[[0 1 2]
 [3 4 5]
 [6 7 8]]
 '''
B = np.arange(6).reshape((3,2))
print(B)
'''[[0 1]
 [2 3]
 [4 5]]
 '''
print(A.dot(B))
print(np.dot(A,B))
'''[[10 13]
 [28 40]
 [46 67]]
 '''
  • trace :对角线上的和
A = np.arange(9).reshape((3,3))
print(A)
'''[[0 1 2]
 [3 4 5]
 [6 7 8]]
 '''
print(A.trace())
print(np.trace(A))
'''12'''
  • det : 行列式
x = np.mat('3 4;2 2')
print(x)
'''[[3 4]
 [2 2]]
 '''
print(np.linalg.det(x))
'''-2'''
  • eigvals、eig :计算特征值和特征向量

注:特征值(eigenvalue)即方程 Ax = ax 的根,是一个标量。其中 A 是一个二维矩阵,x 是一个一维向量。特征向量(eigenvector)是关于特征值的向量

函数 eigvals 函数可以计算矩阵的特征值,而 eig 函数可以返回一个包含特征值和对应的特征向量的元组

C = np.mat('3 -2;1 0')
# 调用eigvals函数求解特征值
e0 = np.linalg.eigvals(C)
print(e0)
'''[2. 1.]'''
# 使用 eig 函数求解特征值和特征向量,第一列为特征值,第二列为特征向量
e1,e2 = np.linalg.eig(C)
print(e1)
'''[2. 1.]'''
print(e2)
'''[[0.89442719 0.70710678]
 [0.4472136  0.70710678]]
 '''
# 检查结果
for i in range(len(e1)):
    print("left:", np.dot(C, e2[:, i]))
    print("right:", e1[i] * e2[:, i])
'''
left: [[1.78885438]
 [0.89442719]]
right: [[1.78885438]
 [0.89442719]]
left: [[0.70710678]
 [0.70710678]]
right: [[0.70710678]
 [0.70710678]]
 '''
  • inv :方阵的逆
A = np.mat('0 1 2;1 0 3;4 -3 8')
print(A)
'''
[[ 0  1  2]
 [ 1  0  3]
 [ 4 -3  8]]
 '''
# 使用inv函数计算逆矩阵
inv = np.linalg.inv(A)
print(inv)
'''
[[-4.5  7.  -1.5]
 [-2.   4.  -1. ]
 [ 1.5 -2.   0.5]]
 '''
# 检查结果
print(inv * A)
'''
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
 '''
  • pinv : 广义逆矩阵
A = np.mat('1 2;4 3')
print(A)
'''
[[1 2]
 [4 3]]
 '''
pseudoinv = np.linalg.pinv(A)
print(pseudoinv)
'''
[[-0.6  0.4]
 [ 0.8 -0.2]]
 '''
  • svd :奇异分解

SVD(Singular Value Decomposition,奇异值分解)是一种因子分解运算,将一个矩阵分解为3个矩阵的乘积
函数 svd 可以对矩阵进行奇异值分解,该函数返回3个矩阵--U、Sigma和V,其中U和V是正交矩阵,Sigma包含输入矩阵的奇异值

A = np.mat('4 11 14;8 7 -2')
print(A)
'''
[[ 4 11 14]
 [ 8  7 -2]]
 '''
# 调用svd函数分解矩阵
U,Sigma,V = np.linalg.svd(A, full_matrices=False)
print('U:{}{}Sigma:{}{}V:{}{}'.format(U,'\n',Sigma,'\n',V,'\n'))
'''
U:[[-0.9486833  -0.31622777]
 [-0.31622777  0.9486833 ]]
Sigma:[18.97366596  9.48683298]
V:[[-0.33333333 -0.66666667 -0.66666667]
 [ 0.66666667  0.33333333 -0.66666667]]
 '''
# 检查结果
print(U * np.diag(Sigma) * V)
'''
[[ 4. 11. 14.]
 [ 8.  7. -2.]]
 '''
  • solve :解线性方程组

solve可以解形如 Ax = b 的线性方程组,其中 A 为矩阵,b 为一维或二维的数组,x是未知变量

B = np.mat('1 -2 1;0 2 -8;-4 5 9')
print(B)
'''
[[ 1 -2  1]
 [ 0  2 -8]
 [-4  5  9]]
 '''
b = np.array([0, 2, 2])
x = np.linalg.solve(B, b)
print(x)
'''[37. 21.  5.]'''
# 检查结果
print(B.dot(x))
'''[[0. 2. 2.]]'''
'''和b相等'''
  • QR分解
    对于m×n的列满秩矩阵A,必有:

                Am*n= Qm*n·Rn*n
    

    其中,QT·Q=I(即Q为正交矩阵),R为非奇异上三角矩阵(即矩阵R的对角线下面的元素全为0)。

    这个将A分解成这样的矩阵Q和R的过程就是QR分解。

    其中当要求R的对角线元素为正时,该分解唯一。

    QR分解可用于求解矩阵A的特征值、A的逆等问题。

# QR分解
A = np.array([[1,2,3,4,0],[-1,3,np.sqrt(2),3,0],[-2,2,np.e,np.pi,0],[-np.sqrt(10),2,-3,7,0],[0,2,7,5/2,0]],dtype=float)
print(A)
'''
[[ 1.          2.          3.          4.          0.        ]
 [-1.          3.          1.41421356  3.          0.        ]
 [-2.          2.          2.71828183  3.14159265  0.        ]
 [-3.16227766  2.         -3.          7.          0.        ]
 [ 0.          2.          7.          2.5         0.        ]]
 '''
A = np.matrix(A,dtype=float)
Q,R = np.linalg.qr(A)
# 验证
print(Q*R)
'''
[[ 1.          2.          3.          4.          0.        ]
 [-1.          3.          1.41421356  3.          0.        ]
 [-2.          2.          2.71828183  3.14159265  0.        ]
 [-3.16227766  2.         -3.          7.          0.        ]
 [ 0.          2.          7.          2.5         0.        ]]
 '''
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容