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 相关文章推荐
pyside写ui界面入门示例
Jan 22 Python
用Python编写一个国际象棋AI程序
Nov 28 Python
Windows安装Python、pip、easy_install的方法
Mar 05 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
Python数据结构之顺序表的实现代码示例
Nov 15 Python
Python中Numpy包的安装与使用方法简明教程
Jul 03 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
Django返回HTML文件的实现方法
Sep 17 Python
Django缓存Cache使用详解
Nov 30 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
一篇文章弄懂Python中的内建函数
Aug 07 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
php&amp;mysql 日期操作小记
2012/02/27 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
event.X和event.clientX的区别分析
2011/10/06 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
2014/05/22 Javascript
JS上传图片前实现图片预览效果的方法
2015/03/02 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
JS中递归函数
2016/06/17 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
vue-cli 目录结构详细讲解总结
2019/01/15 Javascript
python中os模块详解
2016/10/14 Python
window下eclipse安装python插件教程
2017/04/24 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
幼师专业毕业生自荐信
2013/09/29 职场文书
企划主管岗位职责
2013/12/12 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
2014党员自我评议表范文
2014/09/20 职场文书
学前教育见习总结
2015/06/23 职场文书
诚实守信主题班会
2015/08/13 职场文书
windows系统安装配置nginx环境
2022/06/28 Servers