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 相关文章推荐
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
Python中使用Boolean操作符做真值测试实例
Jan 30 Python
windows下安装Python和pip终极图文教程
Mar 05 Python
python利用Guetzli批量压缩图片
Mar 23 Python
python中defaultdict的用法详解
Jun 07 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
浅谈python正则的常用方法 覆盖范围70%以上
Mar 14 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
Python文件路径名的操作方法
Oct 30 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
使用Bazel编译TensorBoard教程
Feb 15 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
深入了解php4(2)--重访过去
2006/10/09 PHP
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
异步动态加载js与css文件的js代码
2013/09/15 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
mac上配置Android环境变量的方法
2018/07/08 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
2018/09/20 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
2019/04/26 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Python绘图实现显示中文
2019/12/04 Python
pytorch::Dataloader中的迭代器和生成器应用详解
2020/01/03 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
python安装后的目录在哪里
2020/06/21 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
世界上最大的汽车共享网站:Zipcar
2017/01/14 全球购物
历史教育专业个人求职信
2013/12/13 职场文书
机关门卫岗位职责
2013/12/30 职场文书
商务英语广告词大全
2014/03/18 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
个人政治思想总结
2015/03/05 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android