Python 如何解決稀疏矩陣運(yùn)算
用Python求解微分線性方程
因?yàn)橹坝胢atlab也編寫(xiě)過(guò),所以前不久試著用python寫(xiě),感覺(jué)之間互通點(diǎn)也蠻多的,易理解。
題目:稀疏線性方程組的求解方法
簡(jiǎn)單的方程如: AX=b
其中

python有很多功能庫(kù),這些庫(kù)對(duì)于編程很有幫助,可以在pycharm的Project Interpreter導(dǎo)入庫(kù),例如numpy、os、scipy等比較基礎(chǔ)的庫(kù),
下面是用來(lái)求解的代碼:
import numpy as np
from scipy import linalg
import os
#輸入矩陣維數(shù)
print("你好,這里是計(jì)算稀疏矩陣線性方程組的地方,非誠(chéng)勿擾!")
dism_num = input("你的A矩陣維數(shù)是:")
dism_num = int(dism_num)
print("接下來(lái)請(qǐng)你依次輸入矩陣的行向量(注意只能輸入英文逗號(hào),):")
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向量
#詢問(wèn)是否計(jì)算單個(gè)答案(單元素)
ask = input("是否只需求解單個(gè)值:(是或否)")
while(True):
if ask == '是':
ask_a = 'T'
ask_num = input("請(qǐng)繼續(xù)輸入你所需要的答案序號(hào):")
ask_num = int(ask_num)
if ask_num<=dism_num and ask_num>0:
print("OK,馬上幫你計(jì)算")
break
else:
print("輸入的值超出矩陣維數(shù),請(qǐng)重新輸入:")
if ask == '否':
ask_a = 'F'
break
#詢問(wèn)完成,只有當(dāng)用戶輸入正確的序號(hào)才可以進(jìn)行計(jì)算,否則重新詢問(wèn)
#開(kāi)始計(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)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Numpy實(shí)現(xiàn)矩陣運(yùn)算及線性代數(shù)應(yīng)用
- Python numpy大矩陣運(yùn)算內(nèi)存不足如何解決
- Python常用庫(kù)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語(yǔ)言實(shí)現(xiàn)矩陣運(yùn)算案例詳解
相關(guān)文章
Python 剪繩子的多種思路實(shí)現(xiàn)(動(dòng)態(tài)規(guī)劃和貪心)
這篇文章主要介紹了Python 剪繩子的多種思路實(shí)現(xiàn)(動(dòng)態(tài)規(guī)劃和貪心),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
使用Python編寫(xiě)一個(gè)模仿CPU工作的程序
這篇文章主要介紹了使用Python編寫(xiě)一個(gè)模仿CPU工作的程序,包括簡(jiǎn)單的內(nèi)存和輸入輸出的實(shí)現(xiàn),本文中的例子需要一定的Python編程基礎(chǔ),是深入Python的實(shí)踐,需要的朋友可以參考下2015-04-04
Python?numpy下幾種fft函數(shù)的使用方式
numpy中有一個(gè)fft的庫(kù),scipy中也有一個(gè)fftpack的庫(kù),各自都有fft函數(shù),兩者的用法基本是一致的,下面這篇文章主要給大家介紹了關(guān)于Python?numpy下幾種fft函數(shù)的使用方式,需要的朋友可以參考下2022-08-08
Python中字典映射類(lèi)型的學(xué)習(xí)教程
這篇文章主要介紹了Python中字典映射類(lèi)型的學(xué)習(xí)教程,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-08-08
django連接oracle時(shí)setting 配置方法
今天小編就為大家分享一篇django連接oracle時(shí)setting 配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
基于Python實(shí)現(xiàn)捕獲,播放和保存攝像頭視頻
這篇文章主要為大家分享一下Python操作視頻最基本的操作,包括讀取和播放視頻和保存視頻。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-04-04
詳解Python+Pyecharts實(shí)現(xiàn)漏斗圖的繪制
漏斗圖是一個(gè)簡(jiǎn)單的散點(diǎn)圖,反映研究在一定樣本量或精確性下單個(gè)研究的干預(yù)效應(yīng)估計(jì)值。本文將用Python Pyecharts實(shí)現(xiàn)漏斗圖的繪制,需要的可以參考一下2022-06-06
利用Python批量循環(huán)讀取Excel的技巧分享
這篇文章主要為大家詳細(xì)介紹了何用Python批量循環(huán)讀取Excel,文中的示例代碼講解詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的可以了解一下2023-07-07

