Python 如何解决稀疏矩阵运算
作者:Thole Lee 发布时间:2022-02-13 21:59:01
标签: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)
来源:https://blog.csdn.net/weixin_42312037/article/details/111828624
0
投稿
猜你喜欢
- 一、SeabornSeaborn 建于 matplotlib 库的之上。它有许多内置函数,使用这些函数,只需简单的代码行就可以创建漂亮的绘图
- 一:建立对象引用计数1. 相关代码void_Py_NewReference(PyObject *op){ if (
- 译者:AlphaImageLoader是一个让IE6正常显示PNG32时要用到的一个滤镜,但它在使用中也会产生一系列的问题,本文对使用Alp
- 1. 想学asyncio,得先了解协程携程的意义:计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状
- 一、数据库操作1、创建model表基本结构:#coding:Utf8from django.db import modelsclass us
- 即text-overflow:ellipsis,需要配合white-space:nowrap使用。运行代码:<div style=&q
- 大家都知道当任务过多,任务量过大时如果想提高效率的一个最简单的方法就是用多线程去处理,比如爬取上万个网页中的特定数据,以及将爬取数据和清洗数
- Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题。感觉是当前工作目录变成了导入p
- 1.如何统计序列中元素出现的频率并排序?统计序列中元素出现的频率的结果肯定是一个字典,Key 为序列中的元素而 Value 为元素出现的次数
- 本文实例讲述了Python实现公历(阳历)转农历(阴历)的方法。分享给大家供大家参考,具体如下:两个要点:1、公历转农历用了查表法(第126
- 呵,以前也没考虑过这方面的东西,现在写的代码越来越多,越来越复杂,如果再不把不用的变量及时释放掉,到时肯定会出问题。今天无意中在无忧Q群里看
- 一、问题这两天在学习使用flask + SQLAlchemy 定制一个web查询页面的demo ,在测试时,发现查询到的结果显示乱码 。这里
- 早上一开Google Reader,发现已经全部被Silverlight 3的消息占领了,基本上都来自于Silverlight
- 本次薯片会讨论了关于分类与类型的问题。怎么找一个item?页面导航一般分类为主,在具体的分类展示下选择类型:典型例子:炫铃(QQ客户端)当只
- 最近对动易CMS有个研究任务,具体研究什么,嘿嘿,保密。网络收集了九个常见的错误原因分析及解决方法错误提示: ADODB.Recordset
- 一般的防止被框架方式或者被框架后自动转向,方法如下: if (top.location != self.loc
- 本文实例讲述了Python json模块dumps、loads操作。分享给大家供大家参考,具体如下:python中json数据的使用。dum
- code原文档 1.txt :HelloNanjing100实现代码:file_ = "1.txt"r_file = o
- 前言在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,那么怎样解决呢?我们可以通过Cookie绕过登录,其
- 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,可是也有它们的不同之处,这段时间刚学完函数与存储过程,来给自己