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 相关文章推荐
20个常用Python运维库和模块
Feb 12 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
Python3编码问题 Unicode utf-8 bytes互转方法
Oct 26 Python
Python中list的交、并、差集获取方法示例
Aug 01 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Python运行异常管理解决方案
Mar 09 Python
Python 线性回归分析以及评价指标详解
Apr 02 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
python中的装饰器该如何使用
Jun 18 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
文件上传的实现
2006/10/09 PHP
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
PHP simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php gd等比例缩放压缩图片函数
2016/06/12 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
jQuery插件pagination实现分页特效
2015/04/12 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
详谈表单格式化插件jquery.serializeJSON
2017/06/23 jQuery
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中的urllib模块使用详解
2015/07/07 Python
python初学之用户登录的实现过程(实例讲解)
2017/12/23 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
《社戏》教学反思
2014/04/15 职场文书
煤矿安全演讲稿
2014/05/09 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
js Proxy的原理详解
2021/05/25 Javascript