Python 如何解决稀疏矩阵运算

用Python求解微分线性方程

因为之前用matlab也编写过,所以前不久试着用python写,感觉之间互通点也蛮多的,易理解。

题目:稀疏线性方程组的求解方法

简单的方程如: AX=b

其中

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 多线程稀疏矩阵乘法

看代码吧~

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)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python selenium模拟网页点击爬虫交管12123违章数据

    在上一篇文章<Python教程-模拟网页点击爬虫定位系统>讲解怎么通过模拟点击方式爬取车辆定位数据,本次介绍怎么以模拟点击方式进入交管12123爬取车辆违章数据,本文直接讲解过程,使用的命令解释见上一篇文章.本文同<Python教程-模拟网页点击爬虫定位系统>同样为企业中实际的爬虫案例,如果之后想进入车企行业可以做个了解. 准备工具:spyder.selenium库.google浏览器及对应版本的chromedriver.exe 效果 注:分享此案例目的是为了帮助同行解放双手,更好

  • python实现简单的井字棋

    本文实例为大家分享了python实现简单的井字棋的具体代码,供大家参考,具体内容如下 使用python实现井字棋游戏,没有具体算法,只是用随机下棋简单实现: import random board = [['+','+','+'],['+','+','+'],['+','+','+']] def ma(board): if isempty(board): a = random.randint(0, 2) b = random.randint(0, 2) if board[a][b] != 'X'

  • python中os.path.join()函数实例用法

    1.说明 拼接文件路径,可以有多个参数. 2.语法 os.path.join(path1,path2,*) path1 初始路径. path2 需要拼接在其后的路径.初始路径文件夹下的文件或文件夹.可以有多个需要拼接的参数,依次拼接. 3.注意 如果拼接在后的参数中含有'\'开头的参数,将从'\'开头的参数开始,前面的参数均将失效,并且路径将从对应磁盘的根目录开始. 4.实例 >>> import os >>> path='D:\dataset' >>>

  • python 实现体质指数BMI计算

    看代码吧~ name = input('Name') height = input('Height(m):') weight = input('Weight(kg):') BIM = float(float(weight)/(float(height)**2)) if BMI <18.5: print('过轻') elif BMI <= 25: print('正常') elif BMI <= 28: print('过重') elif BMI <= 32: print('肥胖') e

  • python scipy 稀疏矩阵的使用说明

    稀疏矩阵格式 coo_matrix coo_matrix 是最简单的稀疏矩阵存储方式,采用三元组(row, col, data)(或称为ijv format)的形式来存储矩阵中非零元素的信息. 在实际使用中,一般coo_matrix用来创建矩阵,因为coo_matrix无法对矩阵的元素进行增删改操作:创建成功之后可以转化成其他格式的稀疏矩阵(如csr_matrix.csc_matrix)进行转置.矩阵乘法等操作. coo_matrix可以通过四种方式实例化,除了可以通过coo_matrix(D)

  • Python 如何解决稀疏矩阵运算

    用Python求解微分线性方程 因为之前用matlab也编写过,所以前不久试着用python写,感觉之间互通点也蛮多的,易理解. 题目:稀疏线性方程组的求解方法 简单的方程如: AX=b 其中 python有很多功能库,这些库对于编程很有帮助,可以在pycharm的Project Interpreter导入库,例如numpy.os.scipy等比较基础的库, 下面是用来求解的代码: import numpy as np from scipy import linalg import os #输入

  • Python如何解决secure_filename对中文不支持问题

    目录 一.最近使用secure_filename发现的问题 二.后面找到了原因 三.解决方案 四.效果展示 前言:最近使用到了secure_filename,然后悲剧的发现中文居然不展示出来,于是我慢慢的debug,终于找到问题了. 一.最近使用secure_filename发现的问题 文件名是中文版的,悲剧的是中文以及其他特殊字符会被省略. 二.后面找到了原因 原来secure_filename()函数只返回ASCII字符,非ASCII字符会被过滤掉. 三.解决方案 找到secure_file

  • Python办公自动化解决world文件批量转换

    目录 python-docx 库简介 读取 Word 写入 Word Word 转 pdf 最后的话 只要是简单重复的工作,就想办法用 Python 来帮你解决吧,人生苦短,你需要 Python. Word 是办公软件中使用频率非常高的软件之一了,假如你需要调整 100 个 Word 文档的格式保持统一,或者要把 100 个 Word 全部转换为 pdf,那么你就需要 Python 来帮忙了. python-docx 库简介 python-docx 是一个可以对 Word 进行读写操作的第三方库

  • 如何使用python数据处理解决数据冲突和样本的选取

    目录 内容介绍 实际业务数据冲突 一般数据冲突类型: 一般数据冲突原因: 一般数据处理方法: 样本的选择 一般数据采样方法: 数据的共线性 一般产生原因: 解决共线性的5种常用方法: 内容介绍 将日常工作中遇到的数数据冲突和样本源的方法进行总结,其中主要包括实际业务数据冲突.样本选取问题.数据共线性 等思路,并且长期更新. 实际业务数据冲突 多业务数据源冲突是指来自多个或具有相同业务逻辑但结果不同的系统,环境,平台和工具的数据. 冲突的不同特征 一般数据冲突类型: 数据类型:同字段数据的格式不同

  • Python中的Numpy 矩阵运算

    目录 在学习线性代数时我们所接触的矩阵之间的乘法是矩阵的叉乘,有这样一个前提: 若矩阵A是m*n阶的,B是p*q阶的矩阵,AB能相乘,首先得满足:n=p,即A的列数要等于B的行数.运算的方法如下图: 当时学线性代数时老师教的更为直观记法: 点乘则是这样: 假如有a,b两个矩阵,在Matlab中我们实现点乘和叉乘的方式分别如下: a.*b %表示点乘 a*b %表示叉乘 下面我们来看看python中的操作: import numpy as np a = np.arange(1, 10).resha

  • Python+OpenCV解决彩色图亮度不均衡问题

    目录 前言 处理 对比度拉伸 log变换 Gamma校正 直方图均衡化 对比度自适应直方图均衡化(CLAHE) 处理结果展示 附源码 opencv版本 skimage版本 前言 CSDN博客好久没有换过头像了,想换个新头像,在相册里面翻来翻去,然后就找到以前养的小宠物的一些照片,有一张特别有意思 惊恐到站起来的金丝熊:这家伙不会要吃我吧 没见过仓鼠的小猫:这啥玩意儿? 好,就决定把这张图当自己的头像了 一顿操作之后,把头像换成了这张照片 此时我:啥玩意儿? ....感觉黑乎乎的,啥也看不清 这时

  • Python中的Numpy 矩阵运算

    目录 在学习线性代数时我们所接触的矩阵之间的乘法是矩阵的叉乘,有这样一个前提: 若矩阵A是m*n阶的,B是p*q阶的矩阵,AB能相乘,首先得满足:n=p,即A的列数要等于B的行数.运算的方法如下图: 当时学线性代数时老师教的更为直观记法: 点乘则是这样: 假如有a,b两个矩阵,在Matlab中我们实现点乘和叉乘的方式分别如下: a.*b %表示点乘 a*b %表示叉乘 下面我们来看看python中的操作: import numpy as np a = np.arange(1, 10).resha

  • Python 完美解决 Import “模块“ could not be resolved ...的问题

    vscode 中 python 提示警告错误,但是还是能跑起来代码: Import "playwright.sync_api" could not be resolved Pylance reportMissingImports 原因可能有两个: 1.未下载此包,打开命令行,输入 $ pip list,可以看到下载过的所有包,如果未下载,则下载后重启 vscode 就可以了. 2.本机有多个 python 的编译环境,比如使用 pyenv 管理多个版本,而在 vscode 里使用的那个

  • Python代码解决RenderView窗口not found问题

    源起 Error:setParent: Object 'renderView' not found 这是一个在工作中很常见的问题,以前做特效的时候有10%的概率会碰到,多发生在打开其他组交接来的Maya场景文件时: 当你不管是从File菜单Open,还是直接拖进Maya都无法解决时.使用下面这段代码即可: 过程 这原本是一段Mel,我用Python把她重写了一下,变成了Python代码~ 根据发展的趋势,Python有可能全面取代Mel. import maya.cmds as mc exist

  • python爬虫解决验证码的思路及示例

    如果直接从生成验证码的页面把验证码下载到本地后识别,再构造表单数据发送的话,会有一个验证码同步的问题,即请求了两次验证码,而识别出来的验证码并不是实际需要发送的验证码.有如下几种方法解决. 法1: 用session: mysession = requests.Session() login_url = 'http://xxx.com' checkcode_url='http://yyy.com' html = mysession.get(login_url,timeout=60*4) #....

随机推荐