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用来获得图片exif信息的库实例分析
Mar 16 Python
Python中.py文件打包成exe可执行文件详解
Mar 22 Python
Python+Wordpress制作小说站
Apr 14 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
python ---lambda匿名函数介绍
Mar 13 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
Apr 16 Python
Python操作Excel把数据分给sheet
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
destoon之一键登录设置
2014/06/21 PHP
PHP+jQuery+Ajax实现用户登录与退出
2015/04/27 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
ZendFramework2连接数据库操作实例
2017/04/18 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
JS求平均值的小例子
2013/11/29 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
vue-cli V3.0版本的使用详解
2018/10/24 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
python类定义的讲解
2013/11/01 Python
python继承和抽象类的实现方法
2015/01/14 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
学生会辞职信
2015/03/02 职场文书
创先争优个人总结
2015/03/04 职场文书
爱的教育观后感
2015/06/17 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python