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编程过程中用单元测试法调试代码的介绍
Apr 02 Python
Django中使用group_by的方法
May 26 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
pandas string转dataframe的方法
Apr 11 Python
python通过zabbix api获取主机
Sep 17 Python
用Python实现数据的透视表的方法
Nov 16 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
Django 解决开发自定义抛出异常的问题
May 21 Python
Idea安装python显示无SDK问题解决方案
Aug 12 Python
Django web自定义通用权限控制实现方法
Nov 24 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实现定时生成HTML网站首页实例代码
2008/11/20 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
用js来解决ajax读取页面乱码
2010/11/28 Javascript
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
Python中实现的RC4算法
2015/02/14 Python
Python实现登录接口的示例代码
2017/07/21 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
浅析python函数式编程
2020/09/26 Python
Python函数调用追踪实现代码
2020/11/27 Python
瑞士国际航空官网:SWISS
2016/07/21 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
大学生毕业自我鉴定范文
2014/02/03 职场文书
绿色城市实施方案
2014/03/19 职场文书
模具专业求职信
2014/06/26 职场文书
2014年学生会工作总结
2014/11/07 职场文书
公诉意见书范文
2015/06/05 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
理解python中装饰器的作用
2021/07/21 Python
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python