使用Python實(shí)現(xiàn)生成對(duì)角矩陣和對(duì)角塊矩陣
矩陣可視化
為了展現(xiàn)不同矩陣之間的差別,在具體介紹scipy中的不同矩陣之前,先構(gòu)造一個(gè)用于繪制矩陣的函數(shù)
import matplotlib.pyplot as plt from itertools import product def drawMat(x, ax=None): M, N = x.shape if not ax: ax = plt.subplot() arrM, arrN = np.arange(M), np.arange(N) plt.yticks(arrM+0.5, arrM) plt.xticks(arrN+0.5, arrN) ax.pcolormesh(x) ax.invert_yaxis() for i,j in product(range(M),range(N)): if x[i,j]!=0: ax.text(j+0.2, i+0.55, f"{x[i,j]:.2}")
對(duì)角矩陣
scipy中的函數(shù)
在scipy.linalg中,通過(guò)tri(N, M=None, k=0, dtype=None)可生成N × M N\times MN×M對(duì)角矩陣,若M=None,則M MM默認(rèn)為N NN。k表示矩陣中用1填充的次對(duì)角線個(gè)數(shù)。
print(tri(3,5,2,dtype=int)) ''' [[1 1 1 0 0] [1 1 1 1 0] [1 1 1 1 1]] '''
在numpy中也提供了多種對(duì)角矩陣生成函數(shù),包括diag, diagflat, tri, tril, triu等,
numpy.diagflat
diagflat用于生成對(duì)角矩陣,diag在diagflat基礎(chǔ)上,添加了提取對(duì)角元素的功能,例如
>>> np.diagflat([1,2,3]) array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) >>> np.diag([1,2,3]) array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) >>> np.diag(np.ones([3,3])) #提取對(duì)角元素 array([1., 1., 1.])
numpy.tri
tri(M,N,k)用于生成M行N列的三角陣,其元素為0或者1,k用于調(diào)節(jié)0和1的分界線相對(duì)于對(duì)角線的位置,例如
fig = plt.figure() mats = { 351:np.tri(3,5,1), 352:np.tri(3,5,2), 353:np.tri(3,5,3) } for i,key in enumerate(mats, 1): ax = fig.add_subplot(1,3,i) drawMat(mats[key], ax) ???????plt.show()
tril, triu可用于提取出矩陣的左下和右上的三角陣,其輸入?yún)?shù)除了待提取矩陣之外,另一個(gè)參數(shù)與tri中的k相同。
fig = plt.figure() x = np.arange(12).reshape(4,3) mats = [np.tril(x,-1),np.triu(x,-1)] for i,mat in enumerate(mats, 1): print(i, mat) ax = fig.add_subplot(1,2,i) drawMat(mat.astype(float), ax) plt.show()
對(duì)角塊矩陣
對(duì)于scipy.linalg.block_diag(A,B,C)
而言,會(huì)生成如下形式矩陣
from scipy.linalg import * import numpy as np A = np.ones([2,2]) B = np.round(np.random.rand(3,3),2) C = np.diag([1,2,3]) bd = block_diag(A,B,C) drawMat(bd) plt.show()
繪圖結(jié)果如下
其中
到此這篇關(guān)于使用Python實(shí)現(xiàn)生成對(duì)角矩陣和對(duì)角塊矩陣的文章就介紹到這了,更多相關(guān)Python對(duì)角矩陣內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)Web服務(wù)器FastAPI的步驟詳解
FastAPI?是一個(gè)用于構(gòu)建?API?的現(xiàn)代、快速(高性能)的?web?框架,使用?Python?3.6+?并基于標(biāo)準(zhǔn)的?Python類(lèi)型提示,這篇文章主要介紹了Python實(shí)現(xiàn)Web服務(wù)器FastAPI的過(guò)程,需要的朋友可以參考下2022-06-06pyinstaller通過(guò)spec文件打包py程序的步驟
這篇文章主要介紹了pyinstaller通過(guò)spec文件打包py程序,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05python3+pyqt5+itchat微信定時(shí)發(fā)送消息的方法
今天小編就為大家分享一篇python3+pyqt5+itchat微信定時(shí)發(fā)送消息的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02python 獲取url中的參數(shù)列表實(shí)例
今天小編就為大家分享一篇python 獲取url中的參數(shù)列表實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python爬蟲(chóng)實(shí)現(xiàn)vip電影下載的示例代碼
這篇文章主要介紹了Python爬蟲(chóng)實(shí)現(xiàn)vip電影下載的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python datetime庫(kù)函數(shù)的示例詳解
datetime?是 Python 內(nèi)置的日期時(shí)間處理庫(kù),它包含了處理日期、時(shí)間、時(shí)間間隔等的類(lèi)和函數(shù),這篇文章主要介紹了Python datetime庫(kù)函數(shù)的詳解,需要的朋友可以參考下2023-07-07Python可視化目標(biāo)檢測(cè)框的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python可視化目標(biāo)檢測(cè)框的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Python函數(shù)中不定長(zhǎng)參數(shù)的寫(xiě)法
今天小編就為大家分享一篇關(guān)于Python函數(shù)中不定長(zhǎng)參數(shù)的寫(xiě)法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02Matplotlib自定義圖例(多張圖共享一個(gè)圖例)
最近再用Matplotlib繪圖,需要做兩個(gè)子圖都不需要設(shè)置圖例,圖例單獨(dú)用一個(gè)figure來(lái)顯示,本文就詳細(xì)的來(lái)介紹一下,感興趣的可以了解一下2023-08-08