利用 Numpy 进行矩阵相关运算
正文共:3266 字 31 圖 預計閱讀時間: 9 分鐘
本文目錄:
- 1. 前言
- 1.1 基本介紹
- 1.2 運行環境
- 2. 函數清單
- 3. 案例講解
- 3.1 Numpy.linalg
- 3.2 Numpy.matlib
1.前言
1.1 基本介紹
NumPy 是Python數據分析必不可少的第三方庫,NumPy 的出現一定程度上解決了Python運算性能不佳的問題,同時提供了更加精確的數據類型。如今,NumPy 被Python其它科學計算包作為基礎包,已成為 Python 數據分析的基礎,可以說 NumPy 就是SciPy、Pandas等數據處理或科學計算庫最基本的函數功能庫。
數據挖掘的理論背后,幾乎離不開線性代數的計算,如矩陣乘法、矩陣分解、行列式求解等。本文將介紹 NumPy(目前最新版本為 1.16) 中與線性代數相關的模塊的使用方法,包括 numpy.linalg , numpy.matlib 。
Numpy : https://docs.scipy.org/doc/numpy/reference/routines.html
numpy.linalg : https://docs.scipy.org/doc/numpy/reference/routines.linalg.html
numpy.matlib : https://docs.scipy.org/doc/numpy/reference/routines.matlib.html
numpy.dual : https://docs.scipy.org/doc/numpy/reference/routines.dual.html
numpy.fft : https://docs.scipy.org/doc/numpy/reference/routines.fft.html
(numpy.dual主要是利用scipy加速運算,用法與linalg和matlib中方法類似,這里不再多做介紹,numpy.fft涉及應用層面,限于篇幅,暫時不做擴展)
1.2 運行環境
- 操作系統: win10
- python版本:3.7.0
- IPython版本:6.5.0
- numpy版本 :1.15.1
2.函數清單
國際慣例,引入 NumPy 使用別名 np ,所有函數清單,方便速查。另外在 Numpy 中一維數組表示向量,多維數組表示矩陣。
| Matrix and vector products | 矩陣相乘 |
| dot(a, b[, out]) | 向量或者矩陣乘積 |
| linalg.multi_dot(arrays) | 多個矩陣的乘積 |
| vdot(a, b) | 僅適用于向量內積 |
| inner(a, b) | 內積( 對于兩個二維數組的inner,相當于按X和Y的最后順序的軸方向上取向量 ,然后依次計算內積后組成的多維數組) |
| outer(a, b[, out]) | 向量外積 |
| matmul(x1, x2, /[, out, casting, order, …]) | 矩陣乘積 |
| linalg.matrix_power(a, n) | 矩陣乘冪 |
| Decompositions | 矩陣分解 |
| linalg.qr(a[, mode]) | 矩陣的QR分解 |
| linalg.svd(a[, full_matrices, compute_uv]) | SVD分解 |
| Matrix eigenvalues | 特征值和特征向量 |
| linalg.eig(a) | 特征值和特征向量(方陣) |
| linalg.eigvals(a) | 特征值(方陣) |
| Norms and other numbers | 范數等 |
| linalg.norm(x[, ord, axis, keepdims]) | 向量或者矩陣的范數 |
| linalg.det(a) | 行列式的值 |
| linalg.matrix_rank(M[, tol, hermitian]) | 使用SVD分解得到矩陣的秩 |
| trace(a[, offset, axis1, axis2, dtype, out]) | 跡 |
| Solving equations and inverting matrices | 解線性方程組和逆 |
| linalg.solve(a, b) | 解線性方程組的準確解(要求滿秩) |
| linalg.tensorsolve(a, b[, axes]) | 解Ax=b |
| linalg.lstsq(a, b[, rcond]) | 最小二乘 |
| linalg.inv(a) | 矩陣的逆 |
| linalg.pinv(a[, rcond]) | 偽逆 |
| Matrix library (numpy.matlib) | 矩陣模塊 |
| mat(data[, dtype]) | 矩陣類型 |
| matrix(data[, dtype, copy]) | 矩陣類型 |
| asmatrix(data[, dtype]) | 將輸入轉化為矩陣類型 |
| bmat(obj[, ldict, gdict]) | 塊矩陣構造 |
| empty(shape[, dtype, order]) | 只記錄形狀的空矩陣 |
| zeros(shape[, dtype, order]) | 全0矩陣 |
| ones(shape[, dtype, order]) | 全1矩陣 |
| matlib.eye(n[, M, k, dtype, order]) | 產生對角線元素為1,其余元素為0的矩陣。 n 行數 M列數 k 對角元相對主對角線的位置 (可以產生長矩陣) |
| identity(n[, dtype]) | 單位陣 |
| matlib.repmat(a, m, n) | 向量或矩陣(最高只支持到2維)列方向重復m次,行方向重復n次 |
| matlib.rand(*args) | 填充隨機數的矩陣 |
| matlib.randn(*args) | 填充數符合標準正態分布的矩陣 |
3.案例講解
3.1 numpy.linalg 模塊
- 模塊引入以及取別名
- 向量或矩陣乘積
- 多矩陣的乘積
相對于矩陣之間兩兩乘積,多矩陣的時候使用 multi_dot() 更加便捷
- 向量內積
只適用于向量,如果為矩陣則結果不為矩陣的內積
- 內積
# 對于兩個二維數組的inner,相當于按X和Y的最后順序的軸方向上取向量
# 然后依次計算內積后組成的多維數組
- 矩陣乘冪
這里使用第二十四講的馬爾科夫矩陣
(這里基本上已經可以確定穩態了)
- QR分解
這里使用第十七講習題課的矩陣,可以發現和我們之前計算的 QR 結果是一致的,只不過有符號的差別。
- SVD分解
這里使用第三十講奇異值分解習題課的例子
- 方陣的特征值和特征向量
這里使用第二十一講習題課的例子
(可以發現結果都對特征向量進行了標準化)
- 特征值
該方法只返回特征值
- 范數
默認是二階范數
- 行列式的值
可以單獨求解單個矩陣的行列式的值,也可以多個矩陣同時求解行列式的值
- 矩陣的秩
同樣支持多個矩陣同時求解矩陣的秩
- 矩陣的跡
- 解線性方程組
使用第二講矩陣消元習題的例子,該方法要求滿秩,即系數矩陣為方陣且各列線性無關。
- 矩陣形式求解線性方程組 (Ax=b)
使用第二講矩陣消元習題的例子,該方法同樣要求滿秩,即系數矩陣為方陣且各列線性無關。
- 最小二乘
使用第十六講習題課的例子,返回值中含有多個值,系數矩陣在返回值的第一個數組中
- 逆
使用第三講課程內容中的例子
- 偽逆
使用第三十四講習題課的例子,這里要求輸入為方陣,因此使用該例子,我們將原矩陣補全為方陣
3.2 numpy.matlib 模塊
- 矩陣類型
- 將其他類型轉化為矩陣類型
- 塊矩陣構造
- 空矩陣
默認會填充隨機值(應該是占位用的)
- 全 0 矩陣
- 全 1 矩陣
- 對角線為 1 矩陣
這里可以不止是在主對角線上,可由參數k控制,該參數定義全為 1 的對角線離主對角線的相對距離,為正則往上三角移動,為負則往下三角移動。 并且可以是非方陣。三個參數分別對應行數,列數和相對位置
- 單位陣
- 隨機數矩陣
- 隨機數符合標準正態分布的矩陣
原文發布于微信公眾號 - 零維領域(lingweilingyu)
總結
以上是生活随笔為你收集整理的利用 Numpy 进行矩阵相关运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能AI、机器学习和深度学习之间的区
- 下一篇: 机器学习中数据处理与可视化的python