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 fileinput模块使用实例
May 28 Python
十条建议帮你提高Python编程效率
Feb 16 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
全面分析Python的优点和缺点
Feb 07 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Python正则表达式急速入门(小结)
Dec 16 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
python3 配置logging日志类的操作
Apr 08 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
Sep 23 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
神族 PROTOSS 概述
2020/03/14 星际争霸
一个改进的UBB类
2006/10/09 PHP
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
php多文件上传实现代码
2014/02/20 PHP
php中JSON的使用与转换
2015/01/14 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
PHP清除缓存的几种方法总结
2017/09/12 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jQuery提示效果代码分享
2014/11/20 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
vue实现axios图片上传功能
2019/08/20 Javascript
卸载vue2.0并升级vue_cli3.0的实例讲解
2020/02/16 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python访问MongoDB,并且转换成Dataframe的方法
2018/10/15 Python
通过shell+python实现企业微信预警
2019/03/07 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python如何调用php文件中的函数详解
2020/12/29 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书