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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
Python实现的检测web服务器健康状况的小程序
Sep 17 Python
使用Python来开发Markdown脚本扩展的实例分享
Mar 04 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
Python3 queue队列模块详细介绍
Jan 05 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
Python字典对象实现原理详解
Jul 01 Python
python构建指数平滑预测模型示例
Nov 21 Python
基于python的列表list和集合set操作
Nov 24 Python
通过cmd进入python的步骤
Jun 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
解析argc argv在php中的应用
2013/06/24 PHP
php生成QRcode实例
2014/09/22 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
php实现paypal 授权登录
2015/05/28 PHP
PHP制作用户注册系统
2015/10/23 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
jquery 常用操作方法
2010/01/28 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
微信小程序中单位rpx和rem的使用
2016/12/06 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
nodejs对项目下所有空文件夹创建gitkeep的方法
2019/08/02 NodeJs
微信小程序实现转盘抽奖
2020/09/21 Javascript
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Python中pygal绘制雷达图代码分享
2017/12/07 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
Python3.6.2调用ffmpeg的方法
2019/01/10 Python
Python Django框架实现应用添加logging日志操作示例
2019/05/17 Python
详解python中*号的用法
2019/10/21 Python
Foreo国际站:Foreo International
2018/10/29 全球购物
美国运动鞋类和服装零售连锁店:Shoe Palace
2019/08/13 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
小学生演讲稿
2014/01/12 职场文书
经营场所使用证明
2015/06/19 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
我去timi了,一起去timi是什么意思?
2022/04/13 杂记