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 应用中使用 MongoDB的方法
Jan 05 Python
Python如何实现守护进程的方法示例
Feb 08 Python
python 多维切片之冒号和三个点的用法介绍
Apr 19 Python
Python用61行代码实现图片像素化的示例代码
Dec 10 Python
python读取目录下最新的文件夹方法
Dec 24 Python
Python 获取项目根路径的代码
Sep 27 Python
使用Pandas将inf, nan转化成特定的值
Dec 19 Python
Flask和pyecharts实现动态数据可视化
Feb 26 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
python 中yaml文件用法大全
Jul 04 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
PHP面向对象学习之parent::关键字
2017/01/18 PHP
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JS模拟实现Select效果代码
2015/09/24 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
python自动格式化json文件的方法
2015/03/11 Python
python实现简单神经网络算法
2018/03/10 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
pyqt5、qtdesigner安装和环境设置教程
2019/09/25 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python切图九宫格的实现方法
2019/10/10 Python
python区分不同数据类型的方法
2019/10/14 Python
Python中url标签使用知识点总结
2020/01/16 Python
python GUI框架pyqt5 对图片进行流式布局的方法(瀑布流flowlayout)
2020/03/12 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
如何通过python检查文件是否被占用
2020/12/18 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
strstr()的简单实现
2013/09/26 面试题
电气工程和自动化自荐信范文
2013/12/25 职场文书
个人借款担保书
2014/04/02 职场文书
入党心得体会
2019/06/20 职场文书
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android