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下载Bing图片(代码)
Nov 07 Python
python实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
python脚本爬取字体文件的实现方法
Apr 29 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
Python XlsxWriter模块Chart类用法实例分析
Mar 11 Python
Django 反向生成url实例详解
Jul 30 Python
浅谈Django+Gunicorn+Nginx部署之路
Sep 11 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
Dec 23 Python
Python selenium的这三种等待方式一定要会!
Jun 10 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php 归并排序 数组交集
2011/05/10 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
nodejs log4js 使用详解
2019/05/31 NodeJs
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
python+mysql实现简单的web程序
2014/09/11 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
Python学习小技巧总结
2018/06/10 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
Python numpy中矩阵的基本用法汇总
2019/02/12 Python
详解Python的循环结构知识点
2019/05/20 Python
python opencv实现证件照换底功能
2019/08/19 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
常见的软件开发流程有哪些
2015/11/14 面试题
分公司经理岗位职责
2013/11/11 职场文书
总经理秘书工作职责
2013/12/26 职场文书
考试保密承诺书
2014/08/30 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
重阳节简报
2015/07/20 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫