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中的CURL PycURL使用例子
Jun 01 Python
Python基于Tkinter实现的记事本实例
Jun 17 Python
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
Python中的with语句与上下文管理器学习总结
Jun 28 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
Python3安装Scrapy的方法步骤
Nov 23 Python
python中的闭包函数
Feb 09 Python
PyQt5固定窗口大小的方法
Jun 18 Python
用django设置session过期时间的方法解析
Aug 05 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python打印不合法的文件名
Jul 31 Python
python关于集合的知识案例详解
May 30 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
解析php php_openssl.dll的作用
2013/07/01 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Jquery 基础学习笔记
2009/05/29 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
JavaScript不刷新实现浏览器的前进后退功能
2014/11/05 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
vue实现浏览器全屏展示功能
2019/11/27 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
Python中实现的RC4算法
2015/02/14 Python
python 实现红包随机生成算法的简单实例
2017/01/04 Python
Python获取CPU、内存使用率以及网络使用状态代码
2018/02/08 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
2019/08/09 Python
Pycharm自动添加文件头注释和函数注释参数的方法
2020/10/23 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
环境工程毕业生自荐信
2013/11/17 职场文书
服装促销活动方案
2014/02/23 职场文书
小学二年级学生评语
2014/04/21 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫