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中xrange和range的区别
May 13 Python
Python语言的12个基础知识点小结
Jul 10 Python
Python统计文件中去重后uuid个数的方法
Jul 30 Python
MySQL适配器PyMySQL详解
Sep 20 Python
使用python 爬虫抓站的一些技巧总结
Jan 10 Python
python中(str,list,tuple)基础知识汇总
Feb 20 Python
Python socket实现简单聊天室
Apr 01 Python
Numpy掩码式数组详解
Apr 17 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
详解python 爬取12306验证码
May 10 Python
python调用Matplotlib绘制分布点图
Oct 18 Python
python绘制彩虹图
Dec 16 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
与数据库连接
2006/10/09 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
php中session与cookie的比较
2015/01/27 PHP
自制PHP框架之设计模式
2017/05/07 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
javascript 缓冲运动框架的实现
2017/09/29 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
2020/09/11 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
Python实现端口复用实例代码
2014/07/03 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
tensorflow构建BP神经网络的方法
2018/03/12 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
应届专科生个人的自我评价
2014/01/05 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
团员个人总结
2015/02/26 职场文书
民事答辩状范本
2015/05/21 职场文书
小学校长开学致辞
2015/07/29 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书