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


猜你喜欢
- 我们知道Excel有一个match函数,可以做数据匹配。比如要根据人名获取成绩而参考表sheet1的内容如下:要根据sheet1匹配每人的成
- 一、前言前文是针对普通的字符串数据进行处理。今天,我们要讲解的textwrap库,是对多文本进行处理的库。比如对于段落的缩进,填充,截取等,
- 背景大家知道现在python主要有两个大的版本,一个是python2另一个是python3,那么不同的人可能会习惯不同的版本,而python
- 如下所示: matplotlib.pyplot.hist( x, bins=10, range=None, normed=Fa
- 一、项目展示心情记事本是一款可以记录当前心情和生活的记事本用户可以选择当前的心情(开心、平淡、伤心)和表情并结合自己想要描述的文字就可以记录
- 使用Form生成html标签的时候,虽然提供了widget的方法可以自定义标签的要是,但是只能给生成的input标签添加样式,对于生成的la
- 持续更新一些常用的Tensor操作,比如List,Numpy,Tensor之间的转换,Tensor的拼接,维度的变换等操作。其它Tensor
- pyqtgraph官方给的示例居然会报错2333官方文档传送门:#####pyqtgraph exportpyqtgraph支持在可视化窗口
- 整数在Python中,整数(integer)是一种内置数据类型,用于表示整数值。Python中的整数类型可以表示任意大小的整数,而不需要考虑
- 本文实例讲述了js对象基础用法。分享给大家供大家参考。具体分析如下:js对象在本质上与数组相同,都是存放一组数据。但创建方法有所不同,对象需
- 文件操作示例#输入文件f = open(r'D:\Python27\pro\123.bak') #输出文件fw = open
- 一、mariadb与mysql简介1、mariadb简介MariaDB由MySQL的创始人Michael Widenius(英语:Micha
- python读取npy文件时,太大不能完全显示,其解决方法当用python读取npy文件时,会遇到npy文件太大,用print函数打印时不能
- pyyaml模块在python中用于处理yaml格式数据,主要使用yaml.safe_dump()、yaml.safe_load()函数将p
- 1. 引言如果能够将我们的无序数据快速组织成更易读的格式,对于数据分析非常有帮助。 Python 提供了将某些表格数据类型轻松转换为格式良好
- python里面可以将路径里面的\替换成/避免转义。os.walk方法可以将目标路径下文件的root,dirs,files提取出来。后面对每
- 通过网上查找资料了解关于性能优化方面的内容,现简单整理,仅供大家在优化的过程中参考使用,如有什么问题请及时提出,再做出相应的补充修改。 一、
- 保存代码到文件:logger.pyimport osimport logbookfrom logbook.more import Color
- 前言:前面提到了Python中的数值型内置数据类型,接下来呢我们就着重介绍一下字符串类型。在Python中字符串是一个有序的字符集合,没有独
- asp代理采集代码如下:<%Function ProxyPage(url) Set Retrieval&