Python 如何解決稀疏矩陣運(yùn)算
用Python求解微分線性方程
因?yàn)橹坝胢atlab也編寫過,所以前不久試著用python寫,感覺之間互通點(diǎn)也蠻多的,易理解。
題目:稀疏線性方程組的求解方法
簡單的方程如: AX=b
其中
python有很多功能庫,這些庫對于編程很有幫助,可以在pycharm的Project Interpreter導(dǎo)入庫,例如numpy、os、scipy等比較基礎(chǔ)的庫,
下面是用來求解的代碼:
import numpy as np from scipy import linalg import os #輸入矩陣維數(shù) print("你好,這里是計(jì)算稀疏矩陣線性方程組的地方,非誠勿擾!") dism_num = input("你的A矩陣維數(shù)是:") dism_num = int(dism_num) print("接下來請你依次輸入矩陣的行向量(注意只能輸入英文逗號,):") A =[] #X =[] for i in range(1,dism_num+1): a=input("第"+str(i)+"行向量是:") alist = a.split(",") alist = [int(alist[j]) for j in range(len(alist))] A.append(alist) print("你所輸入的矩陣行向量是:") print(A) #記錄輸入的X矩陣 #輸入向量b print("輸入b向量") b = input("b向量是:") b_list = b.split(",") b_list = [int(b_list[j]) for j in range(len(b_list))] print("你輸入的b向量是:") print(b_list) #記錄b向量 #詢問是否計(jì)算單個答案(單元素) ask = input("是否只需求解單個值:(是或否)") while(True): if ask == '是': ask_a = 'T' ask_num = input("請繼續(xù)輸入你所需要的答案序號:") ask_num = int(ask_num) if ask_num<=dism_num and ask_num>0: print("OK,馬上幫你計(jì)算") break else: print("輸入的值超出矩陣維數(shù),請重新輸入:") if ask == '否': ask_a = 'F' break #詢問完成,只有當(dāng)用戶輸入正確的序號才可以進(jìn)行計(jì)算,否則重新詢問 #開始計(jì)算x向量了 A = np.array(A) b = np.array(b_list) x = linalg.solve(A,b) print("計(jì)算的結(jié)果的:") if ask_a == 'F': print(x) if ask_a =='T': print(x[ask_num-1]) #計(jì)算完x向量了 os.system("pause") #用于py文件結(jié)束玩暫停顯示結(jié)果
其基本流程如圖:
運(yùn)行結(jié)果如下:
補(bǔ)充:python 多線程稀疏矩陣乘法
看代碼吧~
import threading, time import numpy as np res = [] class MyThread(threading.Thread): def __init__(self,i,j,m1,m2): threading.Thread.__init__(self) self.x, self.y = i,j self.m1, self.m2 = m1, m2 def run(self): global res, lock if lock.acquire(): m1 = self.m1[self.m1[:,0]==self.x] m2 = self.m2[self.m2[:,1]==self.y] value = 0. for item1 in m1: for item2 in m2: if item1[1] == item2[0]: value += item1[2]*item2[2] res.append([self.x,self.y,value]) lock.release() if "__main__" == __name__: m1 = [[2,2],[0,0,1],[0,1,2],[1,0,3],[1,1,4]] m2 = [[2,3],[0,0,2],[0,2,1],[1,2,3],[1,1,4]] s1, s2 = m1[0], m2[0] assert s1[1]==s2[0], 'mismatch' m1_value = np.array(m1[1:]) m2_value = np.array(m2[1:]) rows, cols = s1[0], s2[1] res.append([rows, cols]) ThreadList = [] lock = threading.Lock() for i in range(rows): for j in range(cols): t = MyThread(i,j,m1_value,m2_value) ThreadList.append(t) for t in ThreadList: t.start() for t in ThreadList: t.join() print (res)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- Numpy實(shí)現(xiàn)矩陣運(yùn)算及線性代數(shù)應(yīng)用
- Python numpy大矩陣運(yùn)算內(nèi)存不足如何解決
- Python常用庫Numpy進(jìn)行矩陣運(yùn)算詳解
- unity實(shí)現(xiàn)貼圖矩陣運(yùn)算(旋轉(zhuǎn)平移縮放)
- python如何進(jìn)行矩陣運(yùn)算
- python矩陣運(yùn)算,轉(zhuǎn)置,逆運(yùn)算,共軛矩陣實(shí)例
- Tensorflow矩陣運(yùn)算實(shí)例(矩陣相乘,點(diǎn)乘,行/列累加)
- C語言實(shí)現(xiàn)矩陣運(yùn)算案例詳解
相關(guān)文章
Python利用PsUtil實(shí)現(xiàn)實(shí)時監(jiān)控系統(tǒng)狀態(tài)
PSUtil是一個跨平臺的Python庫,用于檢索有關(guān)正在運(yùn)行的進(jìn)程和系統(tǒng)利用率(CPU,內(nèi)存,磁盤,網(wǎng)絡(luò),傳感器)的信息。本文就來用PsUtil實(shí)現(xiàn)實(shí)時監(jiān)控系統(tǒng)狀態(tài),感興趣的可以跟隨小編一起學(xué)習(xí)一下2023-04-04Python 中 Virtualenv 和 pip 的簡單用法詳解
本篇文章主要介紹了Python 中 Virtualenv 和 pip 的簡單用法詳解,具有一定的參考價值,有興趣的可以了解一下2017-08-08Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記
類與類方法是面向?qū)ο蟮木幊陶Z言中必不可少的特性,本文總結(jié)了Python面向?qū)ο缶幊讨嘘P(guān)于類和方法的學(xué)習(xí)筆記,需要的朋友可以參考下2016-06-06Python中通過property設(shè)置類屬性的訪問
為了達(dá)到類似C++類的封裝性能,可以使用property來設(shè)置Python類屬性的訪問權(quán)限,本文就介紹一下Python中通過property設(shè)置類屬性的訪問,感興趣的可以了解一下,感興趣的可以了解一下2023-09-09Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例代碼
本篇文章主要介紹了Python實(shí)現(xiàn)圖片轉(zhuǎn)字符畫的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08django中的數(shù)據(jù)庫遷移的實(shí)現(xiàn)
這篇文章主要介紹了django中的數(shù)據(jù)庫遷移的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03