前言:這是學(xué)校多元統(tǒng)計(jì)分析課程布置的實(shí)驗(yàn)(包括基于python的線性代數(shù)運(yùn)算、線性回歸分析實(shí)驗(yàn)、聚類分析、因子分析和主成分分析),這里分享出來,注解標(biāo)注的比較全,供大家參考。
使用Python語(yǔ)言開發(fā)完成以下運(yùn)算。
1、已知有兩個(gè)矩陣A和B,如下所示:
①求A+B、A-B;
import numpy as np
import pandas as pd
from fractions import Fraction
# 這里定義一個(gè)單位矩陣,作為結(jié)果判斷依據(jù)
temp = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
# 定義矩陣A
A = np.array([[-1, 3, 2],
[5, 7, -2],
[-3, 0, 1]])
# 定義矩陣B
B = np.array([[8, 2, -1],
[6, 4, 0],
[-2, 3, 5]])
# A+B
print(A+B)
# A-B
print(A-B)
②求A和B的叉乘、A和B的點(diǎn)乘;
# 兩個(gè)矩陣的叉乘
AXB = np.cross(A, B)
print(AXB)
# 兩個(gè)矩陣的點(diǎn)乘
AB = np.dot(A, B)
print(AB)
③令C=A*B,求C的逆矩陣、行列式;
# np.linalg.inv求矩陣的逆矩陣
C = np.linalg.inv(AB)
# np.linalg.det求矩陣的行列式
CH = np.linalg.det(AB)
④驗(yàn)證C和C的逆矩陣之積是否為單位矩陣;
print(np.array(C.dot(AB), dtype=int))
2、讀取文件“test1-2.csv”,獲取25*4的矩陣D:
①求矩陣D的轉(zhuǎn)置矩陣G;
# 設(shè)置矩陣元素輸出用分?jǐn)?shù)表示
np.set_printoptions(formatter={'all': lambda x: str(Fraction(x).limit_denominator())})
# 這里如果不設(shè)置header=None默認(rèn)就將數(shù)據(jù)第一行當(dāng)作數(shù)據(jù)頭
df = pd.read_csv("test1-2.csv", header=None)
# 轉(zhuǎn)置矩陣
G = np.mat(df.T)
②求矩陣G的相關(guān)系數(shù)矩陣(4*4)E;
# 平均值
mean = df.mean()
# 標(biāo)準(zhǔn)差
std = df.std()
# 協(xié)方差
F = np.mat(df.cov())
# 相關(guān)系數(shù)
# E = np.mat(F/np.mat(std))
E = np.corrcoef(G)
③求矩陣G的協(xié)方差矩陣(4*4)F;
# 協(xié)方差
F = np.mat(df.cov())
④求解矩陣E和矩陣F的特征值和特征向量;
# 矩陣E的特征值a,特征向量b
a, b = np.linalg.eig(E)
# 矩陣F同理
⑤驗(yàn)證矩陣E的特征向量間的正交性;
'''
驗(yàn)證矩陣E的特征向量間的正交性
https://www.cnpython.com/qa/139953
'''
print(b.dot(b.T))
⑥驗(yàn)證矩陣E的特征值之和是否等于E的跡;
# 矩陣E的跡
traceE = np.trace(E)
# 矩陣E的特征值a
a, b = np.linalg.eig(E)
# 矩陣E的特征值之和sumE
sumE = round(sum(a), 8)
print(sumE == traceE)
⑦對(duì)矩陣D的做奇異值分解,輸出左奇異矩陣、奇異值和右奇異矩陣,并查看左奇異矩陣和右奇異矩陣是否為正交矩陣;
'''
對(duì)矩陣D的做奇異值分解,輸出左奇異矩陣、奇異值和右奇異矩陣,并查看左奇異矩陣和右奇異矩陣是否為正交矩陣。
https://jingyan.baidu.com/article/e75057f2385f34ebc81a8944.html
'''
# u - ;v - 奇異值;w -
u, v, w = np.linalg.svd(df)
print(u)
# 左奇異矩陣
print(u)
# 奇異值
print(v)
# 右奇異矩陣
print(w)
# 將v轉(zhuǎn)化為對(duì)角矩陣
v = np.diag(v)
print(u)
# 查看左奇異矩陣和右奇異矩陣是否為正交矩陣。
u = u.dot(u.T)
w = w.dot(w.T)
print(u)
'''
將矩陣與單位矩陣比較np.allclose(w, np.eye(4))
np.eye()中的參數(shù)按照生成的矩陣的格式
https://www.cnpython.com/qa/164423
'''
print(np.allclose(u, np.eye(25)))
print(np.allclose(w, np.eye(4)))
tips:
q1:在驗(yàn)證一個(gè)矩陣和其逆矩陣相乘時(shí)是否等于單位矩陣,發(fā)現(xiàn)結(jié)果包含許多接近于0但不等于0的科學(xué)計(jì)數(shù)法的數(shù)字。
a1:網(wǎng)上說因?yàn)榫仃嚱咏娈愔担簿褪窃谖覀兦笃淠婢仃嚂r(shí)會(huì)出現(xiàn)偽逆,或者無窮小數(shù),那么我們?cè)谇竽婢仃嚂r(shí)就不要使用pinv求逆矩陣,因?yàn)榇朔椒〞?huì)把矩陣的偽逆求出來如果逆不存在的話,第二就是輸出結(jié)果轉(zhuǎn)換為int類型,去掉小數(shù)即可。
q2:進(jìn)行驗(yàn)證矩陣E的特征值之和是否等于E的跡時(shí),發(fā)現(xiàn)矩陣E的特征值之和不為期望結(jié)果。
a2:從輸出的特征值可以看出所有數(shù)值都是8位小數(shù),所以在使用函數(shù)計(jì)算時(shí)可能有小數(shù)的四舍五入。那么他們之間的和有出入是必然的,但是結(jié)果的誤差非常小,所以只需對(duì)結(jié)果取整即可。
源碼
實(shí)驗(yàn)所用到的所有文件獲取1文章來源:http://www.zghlxwxcb.cn/news/detail-402973.html
實(shí)驗(yàn)所用到的所有文件獲取2,提取碼:uj7m文章來源地址http://www.zghlxwxcb.cn/news/detail-402973.html
到了這里,關(guān)于基于python的線性代數(shù)運(yùn)算的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!