欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用python進(jìn)行矩陣運(yùn)算實(shí)例代碼

 更新時間:2024年12月19日 08:30:30   作者:weixin_46846685  
這篇文章主要給大家介紹了關(guān)于如何利用python進(jìn)行矩陣運(yùn)算的相關(guān)資料,Numpy是Python編程語言中的一個核心庫,專門用于處理多維數(shù)據(jù)和矩陣運(yùn)算,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、矩陣相乘

python中矩陣相乘可以使用numpy實(shí)現(xiàn),也可以使用sympy實(shí)現(xiàn),以numpy實(shí)現(xiàn)為例,代碼如下:

import numpy as np

a01=np.random.randint(10,size=(4,3))
print(a01)
array([[6, 4, 9],
       [1, 4, 8],
       [8, 0, 0],
       [5, 6, 8]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],
       [6, 4, 6, 2],
       [5, 2, 8, 2]])

a03=np.dot(a01,a02)
print(a03)
array([[ 99,  76, 138,  80],
       [ 69,  39,  95,  33],
       [ 40,  56,  56,  72],
       [101,  75, 135,  73]])

也可將乘積轉(zhuǎn)換為分?jǐn)?shù)形式,示例代碼如下:

import numpy as np
from fractions import Fraction

a01=np.random.randint(10,size=(4,3)).astype(float)
a01[0,0]=0.5
print(a01)
array([[0.5, 4. , 3. ],
       [0. , 4. , 4. ],
       [4. , 3. , 6. ],
       [0. , 2. , 6. ]])
a02=np.random.randint(10,size=(3,4))
print(a02)
array([[5, 7, 7, 9],
       [6, 4, 6, 2],
       [5, 2, 8, 2]])

a03=np.dot(a01,a02)
print(a03)#a03為小數(shù)形式
array([[41.5, 25.5, 51.5, 18.5],
       [44. , 24. , 56. , 16. ],
       [68. , 52. , 94. , 54. ],
       [42. , 20. , 60. , 16. ]])

a04=np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a03)
print(a04)#a04為分?jǐn)?shù)形式
array([[Fraction(83, 2), Fraction(51, 2), Fraction(103, 2), Fraction(37, 2)],
       [Fraction(44, 1), Fraction(24, 1), Fraction(56, 1), Fraction(16, 1)],
       [Fraction(68, 1), Fraction(52, 1), Fraction(94, 1), Fraction(54, 1)],
       [Fraction(42, 1), Fraction(20, 1), Fraction(60, 1), Fraction(16, 1)]], dtype=object)

二、矩陣求逆

分別使用numpy和sympy實(shí)現(xiàn),代碼如下:

import numpy as np
from fractions import Fraction

#numpy實(shí)現(xiàn)
a01=np.random.randint(5,size=(2,2))
print(a01)
array([[4, 0],
       [3, 4]])
a02 = np.linalg.inv(a01.astype(float))#求逆矩陣
print(a02)
array([[ 0.25  ,  0.    ],
       [-0.1875,  0.25  ]])

a03=np.vectorize(lambda x: Fraction.from_float(x).limit_denominator())(a02)
print(a03)#分?jǐn)?shù)形式
array([[Fraction(1, 4), Fraction(0, 1)],
       [Fraction(-3, 16), Fraction(1, 4)]], dtype=object)

#sympy實(shí)現(xiàn)
a04=Matrix([[4,0],[3,4]])
print(a04)
Matrix([
[4, 0],
[3, 4]])
print(a04.inv())
Matrix([
[  1/4,   0],
[-3/16, 1/4]])

從求解結(jié)果分析,sympy會自動給出結(jié)果的簡潔形式,如果是分?jǐn)?shù)則用分?jǐn)?shù)表示,在展示效果上優(yōu)于numpy。

三、矩陣特征值與特征向量求解

分別使用numpy和sympy實(shí)現(xiàn),代碼如下:

import numpy as np
from sympy import Matrix

#numpy實(shí)現(xiàn)
a01=np.array([[-1,2,0],[0,3,0],[2,1,-1]])
print(a01)
array([[-1,  2,  0],
       [ 0,  3,  0],
       [ 2,  1, -1]])
eigenvalue, featurevector = np.linalg.eig(a01)
print(eigenvalue)
array([-1., -1.,  3.])
print(featurevector)
array([[ 0.00000000e+00,  1.11022302e-16,  4.08248290e-01],
       [ 0.00000000e+00,  0.00000000e+00,  8.16496581e-01],
       [ 1.00000000e+00, -1.00000000e+00,  4.08248290e-01]])

#sympy實(shí)現(xiàn)
a02=Matrix([[-1,2,0],[0,3,0],[2,1,-1]])
print(a02)
Matrix([
[-1, 2,  0],
[ 0, 3,  0],
[ 2, 1, -1]])
print(a02.eigenvals())
{3: 1, -1: 2}#3: 1意為特征值為3,個數(shù)為1個,-1: 2意為特征值為-1,個數(shù)為2個
print(a02.eigenvects())
[(-1, 2, [Matrix([
[0],
[0],
[1]])]), (3, 1, [Matrix([
[1],
[2],
[1]])])]

從求解結(jié)果看,sympy的求解結(jié)果比numpy求解結(jié)果更為直觀。

四、矩陣約當(dāng)標(biāo)準(zhǔn)型與轉(zhuǎn)換矩陣求解

矩陣約當(dāng)標(biāo)準(zhǔn)型與轉(zhuǎn)換矩陣使用numpy求解較為繁瑣,因此使用sympy求解,代碼如下:

from sympy import Matrix

a01=Matrix([[-1,2,0],[0,3,0],[2,1,-1]])
print(a01)
Matrix([
[-1, 2,  0],
[ 0, 3,  0],
[ 2, 1, -1]])
p_mat,j_mat=a01.jordan_form()#p_mat為轉(zhuǎn)換矩陣,j_mat為約當(dāng)標(biāo)準(zhǔn)型
print(p_mat)
Matrix([
[0, 1, 1],
[0, 0, 2],
[2, 0, 1]])
print(j_mat)
Matrix([
[-1,  1, 0],
[ 0, -1, 0],
[ 0,  0, 3]])

注意sympy求解的約當(dāng)標(biāo)準(zhǔn)型的1放在上三角,有些數(shù)學(xué)教材中將1放在下三角。

五、矩陣奇異值分解

sympy不直接支持矩陣奇異值的求解,因此使用numpy求解,代碼如下:

import numpy as np

a02=np.array([[4,0],[3,0],[0,0]])
print(a02)
array([[4, 0],
       [3, 0],
       [0, 0]])
U, S, Vt = np.linalg.svd(a02)
print(U)#左奇異向量組成的酉矩陣
array([[-0.8, -0.6,  0. ],
       [-0.6,  0.8,  0. ],
       [ 0. ,  0. ,  1. ]])
print(S)#奇異值
array([5., 0.])
print(Vt)#右奇異向量組成的酉矩陣
array([[-1., -0.],
       [ 0.,  1.]])

奇異向量組成的酉矩陣并不唯一。

六、矩陣方程組求解

使用sympy求解,代碼如下:

from sympy import Matrix, symbols, linsolve

A = Matrix([[2,3,1],[4,2,3], [7,1,-1]])
print(A)
Matrix([
[2, 3,  1],
[4, 2,  3],
[7, 1, -1]])
B = Matrix([[4],[17],[1]])
print(B)
Matrix([
[ 4],
[17],
[ 1]])
x, y, z = symbols('x y z')
result=linsolve((A,B),x,y,z)
print(result)
{(1, -1, 5)}

A = Matrix([[1,1,1,1],[4,3,5,-1], [2,1,3,-3]])
print(A)
Matrix([
[1, 1, 1,  1],
[4, 3, 5, -1],
[2, 1, 3, -3]])
B = Matrix([[-1],[-1],[1]])
print(B)
Matrix([
[-1],
[-1],
[ 1]])
x, y, z = symbols('x y z')
result=linsolve((A,B),x,y,z)
print(result)
{(2 - 2*z, z - 3, z)}

從示例代碼可看出,sympy可以解參數(shù)矩陣非奇異時的方程組,也可以解參數(shù)矩陣奇異時的方程組,并且給出通解。

總結(jié)

到此這篇關(guān)于利用python進(jìn)行矩陣運(yùn)算的文章就介紹到這了,更多相關(guān)python矩陣運(yùn)算內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python如何獲取服務(wù)器硬件信息

    python如何獲取服務(wù)器硬件信息

    這篇文章主要為大家詳細(xì)介紹了python獲取服務(wù)器硬件信息的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 分享4個Python中高效省時的技巧

    分享4個Python中高效省時的技巧

    小伙伴們?nèi)粘9ぷ髦卸急夭豢缮俚厥褂肞ython實(shí)現(xiàn)一些簡單的功能,但是不同的人所編寫的代碼執(zhí)行效率往往是不同的,下面這篇文章主要給大家介紹了4個Python中高效的技巧,需要的朋友可以參考下
    2022-05-05
  • Python函數(shù)和模塊的使用總結(jié)

    Python函數(shù)和模塊的使用總結(jié)

    在本文中小編給大家整理了關(guān)于Python函數(shù)和模塊的使用的相關(guān)知識點(diǎn)以及實(shí)例代碼內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • python實(shí)現(xiàn)簡易學(xué)生信息管理系統(tǒng)

    python實(shí)現(xiàn)簡易學(xué)生信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡易學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • win10環(huán)境下python3.5安裝步驟圖文教程

    win10環(huán)境下python3.5安裝步驟圖文教程

    本文通過圖文并茂的形式給大家介紹了win10環(huán)境下python3.5安裝步驟,需要的朋友可以參考下
    2017-02-02
  • 解決阿里云郵件發(fā)送不能使用25端口問題

    解決阿里云郵件發(fā)送不能使用25端口問題

    這篇文章主要介紹了解決阿里云郵件發(fā)送不能使用25端口問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python 密碼學(xué)示例——凱撒密碼的實(shí)現(xiàn)

    python 密碼學(xué)示例——凱撒密碼的實(shí)現(xiàn)

    這篇文章主要介紹了python 密碼學(xué)示例——凱撒密碼的實(shí)現(xiàn),幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下
    2020-09-09
  • Python 如何給圖像分類(圖像識別模型構(gòu)建)

    Python 如何給圖像分類(圖像識別模型構(gòu)建)

    這篇文章主要介紹了Python 教你如何給圖像分類,今天的文章主要是講圖像識別模型如何構(gòu)建,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • Keras存在自定義loss或layer怎樣解決load_model報錯問題

    Keras存在自定義loss或layer怎樣解決load_model報錯問題

    這篇文章主要介紹了Keras存在自定義loss或layer怎樣解決load_model報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python腳本實(shí)現(xiàn)下載合并SAE日志

    Python腳本實(shí)現(xiàn)下載合并SAE日志

    這篇文章主要介紹了Python腳本實(shí)現(xiàn)下載合并SAE日志,本文講解了代碼編寫過程,然后給出了完整代碼,需要的朋友可以參考下
    2015-02-02

最新評論