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 相关文章推荐
python计算文本文件行数的方法
Jul 06 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python enumerate函数功能与用法示例
Mar 01 Python
python算法题 链表反转详解
Jul 02 Python
Python 转换文本编码实现解析
Aug 27 Python
Python csv模块使用方法代码实例
Aug 29 Python
pycharm新建Vue项目的方法步骤(图文)
Mar 04 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
Python深度学习之Pytorch初步使用
May 20 Python
python创建字典及相关管理操作
Apr 13 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
析构函数与php的垃圾回收机制详解
2013/10/28 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
phpmyadmin出现Cannot start session without errors问题解决方法
2014/08/14 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP文件上传操作实例详解
2016/09/27 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
超简单的jquery的AJAX用法
2010/05/10 Javascript
Javascript实现的鼠标经过时播放声音
2010/05/18 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
vue实现购物车的监听
2020/04/20 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
Python下使用Scrapy爬取网页内容的实例
2018/05/21 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python3 读取Excel表格中的数据
2018/10/16 Python
用scikit-learn和pandas学习线性回归的方法
2019/06/21 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
Windows和Linux动态库应用异同
2016/07/28 面试题
合伙经营协议书范本
2014/09/13 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2015年化验室工作总结
2015/04/23 职场文书
2016年元旦致辞
2015/08/01 职场文书
纪检干部学习心得体会
2016/01/23 职场文书