Python 如何解决稀疏矩阵运算


Posted in Python onMay 26, 2021

用Python求解微分线性方程

因为之前用matlab也编写过,所以前不久试着用python写,感觉之间互通点也蛮多的,易理解。

题目:稀疏线性方程组的求解方法

简单的方程如: AX=b

其中

Python 如何解决稀疏矩阵运算

python有很多功能库,这些库对于编程很有帮助,可以在pycharm的Project Interpreter导入库,例如numpy、os、scipy等比较基础的库,

下面是用来求解的代码:

import numpy as np
from scipy import linalg
import os
#输入矩阵维数
print("你好,这里是计算稀疏矩阵线性方程组的地方,非诚勿扰!")
dism_num = input("你的A矩阵维数是:")
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向量

#询问是否计算单个答案(单元素)
ask = input("是否只需求解单个值:(是或否)")
while(True):
    if ask == '是':
        ask_a = 'T'
        ask_num = input("请继续输入你所需要的答案序号:")
        ask_num = int(ask_num)
        if ask_num<=dism_num and ask_num>0:
            print("OK,马上帮你计算")
            break
        else:
            print("输入的值超出矩阵维数,请重新输入:")
    if ask == '否':
        ask_a = 'F'
        break
#询问完成,只有当用户输入正确的序号才可以进行计算,否则重新询问

#开始计算x向量了
A = np.array(A)
b = np.array(b_list)
x = linalg.solve(A,b)
print("计算的结果的:")
if ask_a == 'F':
    print(x)
if ask_a =='T':
    print(x[ask_num-1])
#计算完x向量了

os.system("pause")
#用于py文件结束玩暂停显示结果

其基本流程如图:

Python 如何解决稀疏矩阵运算

运行结果如下:

Python 如何解决稀疏矩阵运算

补充:python 多线程稀疏矩阵乘法

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)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
Python制作爬虫抓取美女图
Jan 20 Python
Python的Tornado框架实现图片上传及图片大小修改功能
Jun 30 Python
Python如何快速实现分布式任务
Jul 06 Python
Python判断两个对象相等的原理
Dec 12 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
python 2.7 检测一个网页是否能正常访问的方法
Dec 26 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
python函数不定长参数使用方法解析
Dec 14 Python
Python读取JSON数据操作实例解析
May 18 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python selenium模拟网页点击爬虫交管12123违章数据
python scipy 稀疏矩阵的使用说明
python中os.path.join()函数实例用法
May 26 #Python
python实现简单的井字棋
May 26 #Python
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
Python 循环读取数据内存不足的解决方案
May 25 #Python
python基于机器学习预测股票交易信号
You might like
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php实现网站插件机制的方法
2009/11/10 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Node.js爬取豆瓣数据实例分析
2018/03/05 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
ant design实现圈选功能
2019/12/17 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[45:50]完美世界DOTA2联赛PWL S3 CPG vs Forest 第二场 12.16
2020/12/17 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python实现360的字符显示界面
2014/02/21 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
Python爬取腾讯视频评论的思路详解
2019/12/19 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
巴西宠物店在线:Geração Pet
2017/05/31 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
贸易经济专业自荐书
2014/06/29 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
如何判断pytorch是否支持GPU加速
2021/06/01 Python
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python