日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python之Numpy入门实战教程(2):进阶篇之线性代数

發布時間:2023/12/10 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python之Numpy入门实战教程(2):进阶篇之线性代数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Numpy、Pandas、Matplotlib是Python的三個重要科學計算庫,今天整理了Numpy的入門實戰教程。NumPy是使用Python進行科學計算的基礎庫。 NumPy以強大的N維數組對象為中心,它還包含有用的線性代數,傅里葉變換和隨機數函數。

本文主要介紹Numpy庫的重要應用:線性代數,線性代數在機器學習和深度學習中有著廣泛的應用。

強烈建議大家將本文中的程序運行一遍。這樣能加深對numpy庫的使用。
?


目錄

1)Matrix transpose

2)Matrix dot product

3)Matrix inverse

4)Identity matrix

5)QR decomposition

6)Determinant

7)Eigenvalues and eigenvectors

8)Singular Value Decomposition

9)Diagonal and trace

10)Solving a system of linear scalar equations


Numpy2維數組在python中可以有效地表示矩陣。 現在我們將快速完成一些主要的矩陣操作。 有關線性代數,向量和矩陣的更多詳細信息,請參閱線性代數教程。

1)Matrix transpose

在線性代數里我們學過轉置這個概念,我們看看它的代碼實現。

m1 = np.arange(10).reshape(2,5) m1#輸出 array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]])#矩陣轉置 m1.T array([[0, 5],[1, 6],[2, 7],[3, 8],[4, 9]])#一維數組轉置 m2 = np.arange(5) m2array([0, 1, 2, 3, 4])m2.T array([0, 1, 2, 3, 4])#我們也可以把一維數組變成二維數組 m2r = m2.reshape(1,5) m2rarray([[0, 1, 2, 3, 4]])m2r.T array([[0],[1],[2],[3],[4]])

2)Matrix dot product

我們創建兩個矩陣然后進行兩個矩陣的乘積運算。矩陣相乘時我們要注意相乘矩陣的維度數。

n1 = np.arange(10).reshape(2, 5) n1#輸出 array([[0, 1, 2, 3, 4],[5, 6, 7, 8, 9]])n2 = np.arange(15).reshape(5,3) n2#輸出 array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11],[12, 13, 14]])#矩陣相乘 n1.dot(n2)array([[ 90, 100, 110],[240, 275, 310]])

3)Matrix inverse

在numpy.linalg模塊中包含許多常見線性代數函數,特別是用于計算方陣矩陣逆的inv函數:

import numpy.linalg as linalgm3 = np.array([[1,2,3],[5,7,11],[21,29,31]]) m3#輸出 array([[ 1, 2, 3],[ 5, 7, 11],[21, 29, 31]])linalg.inv(m3) array([[-2.31818182, 0.56818182, 0.02272727],[ 1.72727273, -0.72727273, 0.09090909],[-0.04545455, 0.29545455, -0.06818182]])

4)Identity matrix

一個矩陣和它的逆矩陣相乘得到的是單位陣。

#矩陣與自身逆矩陣相乘 m3.dot(linalg.inv(m3))#輸出 array([[ 1.00000000e+00, -1.66533454e-16, 0.00000000e+00],[ 6.31439345e-16, 1.00000000e+00, -1.38777878e-16],[ 5.21110932e-15, -2.38697950e-15, 1.00000000e+00]])#創建3x3單位陣 np.eye(3)array([[1., 0., 0.],[0., 1., 0.],[0., 0., 1.]])

5)QR decomposition

在工程問題中,我們經常進行矩陣分解,NumPy也提供了矩陣分解函數。

#矩陣QR分解 q, r = linalg.qr(m3) qarray([[-0.04627448, 0.98786672, 0.14824986],[-0.23137241, 0.13377362, -0.96362411],[-0.97176411, -0.07889213, 0.22237479]])r array([[-21.61018278, -29.89331494, -32.80860727],[ 0. , 0.62427688, 1.9894538 ],[ 0. , 0. , -3.26149699]])q.dot(r) array([[ 1., 2., 3.],[ 5., 7., 11.],[21., 29., 31.]])

6)Determinant

我們看看如何計算矩陣的行列式。

linalg.det(m3) 43.99999999999997

7)Eigenvalues and eigenvectors

我們看看如何計算矩陣的特征值和特征向量。

#計算特征值、特征向量 eigenvalues, eigenvectors = linalg.eig(m3) eigenvalues # λarray([42.26600592, -0.35798416, -2.90802176])eigenvectors # varray([[-0.08381182, -0.76283526, -0.18913107],[-0.3075286 , 0.64133975, -0.6853186 ],[-0.94784057, -0.08225377, 0.70325518]])#驗證 m3.dot(eigenvectors) - eigenvalues * eigenvectors # m3.v - λ*v = 0 array([[ 6.66133815e-15, 1.66533454e-15, -3.10862447e-15],[ 7.10542736e-15, 5.16253706e-15, -5.32907052e-15],[ 3.55271368e-14, 4.94743135e-15, -9.76996262e-15]])

8)Singular Value Decomposition

我們來進行矩陣的奇異值分解,這經常用來在降低矩陣的運算復雜度。矩陣變得稀疏。

m4 = np.array([[1,0,0,0,2], [0,0,3,0,0], [0,0,0,0,0], [0,2,0,0,0]]) m4array([[1, 0, 0, 0, 2],[0, 0, 3, 0, 0],[0, 0, 0, 0, 0],[0, 2, 0, 0, 0]])U, S_diag, V = linalg.svd(m4) U #輸出 array([[ 0., 1., 0., 0.],[ 1., 0., 0., 0.],[ 0., 0., 0., -1.],[ 0., 0., 1., 0.]])S_diag array([3. , 2.23606798, 2. , 0. ]) #只返回對角線的值#創建返回full維矩陣S_diag S = np.zeros((4, 5)) S[np.diag_indices(4)] = S_diag S # Σ array([[3. , 0. , 0. , 0. , 0. ],[0. , 2.23606798, 0. , 0. , 0. ],[0. , 0. , 2. , 0. , 0. ],[0. , 0. , 0. , 0. , 0. ]])V array([[-0. , 0. , 1. , -0. , 0. ],[ 0.4472136 , 0. , 0. , 0. , 0.89442719],[-0. , 1. , 0. , -0. , 0. ],[ 0. , 0. , 0. , 1. , 0. ],[-0.89442719, 0. , 0. , 0. , 0.4472136 ]])#驗證 U.dot(S).dot(V) # U.Σ.V == m4 array([[1., 0., 0., 0., 2.],[0., 0., 3., 0., 0.],[0., 0., 0., 0., 0.],[0., 2., 0., 0., 0.]])

9)Diagonal and trace

我們看看如何返回矩陣的對角線元素

np.diag(m3) #返回對角線元素 array([ 1, 7, 31])np.trace(m3) #返回矩陣的跡 39

10)Solving a system of linear scalar equations

我們現在來求解一個線性方程組。方程組如下:

coeffs = np.array([[2, 6], [5, 3]]) depvars = np.array([6, -9]) solution = linalg.solve(coeffs, depvars) solutionarray([-3., 2.])#檢查解是否正確 coeffs.dot(solution), depvars(array([ 6., -9.]), array([ 6, -9]))#另一種檢查的方法 np.allclose(coeffs.dot(solution), depvars)True

Summary

現在我們已經了解了Numpy庫的基本操作,但還有很多我們部分可供學習。最好的方法還是在實踐中學習Numpy,我們可以參考Numpy的官方文檔來尋找需要的函數和有用的功能。

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的Python之Numpy入门实战教程(2):进阶篇之线性代数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。