首页 > 其他分享 >矩阵计算2

矩阵计算2

时间:2023-06-23 16:00:13浏览次数:38  
标签:__ res self 矩阵 shape 计算 data

import numpy as np

class Matrix:
def __init__(self, data):
self.data = data
self.shape = (len(data), len(data[0]))

def __add__(self, other):
# 矩阵加法
if self.shape != other.shape:
raise ValueError("矩阵形状不匹配")
res_data = [[0] * self.shape[1] for i in range(self.shape[0])]
for i in range(self.shape[0]):
for j in range(self.shape[1]):
res_data[i][j] = self.data[i][j] + other.data[i][j]
return Matrix(res_data)

def __sub__(self, other):
# 矩阵减法
if self.shape != other.shape:
raise ValueError("矩阵形状不匹配")
res_data = [[0] * self.shape[1] for i in range(self.shape[0])]
for i in range(self.shape[0]):
for j in range(self.shape[1]):
res_data[i][j] = self.data[i][j] - other.data[i][j]
return Matrix(res_data)

def __mul__(self, other):
# 矩阵乘法
if self.shape[1] != other.shape[0]:
raise ValueError("矩阵形状不匹配")
other_data = np.array(other.data)
res_data = [[0] * other.shape[1] for i in range(self.shape[0])]
for i in range(self.shape[0]):
for j in range(other.shape[1]):
res_data[i][j] = np.dot(self.data[i], other_data[:, j])
return Matrix(res_data)

def __rmul__(self, scalar):
# 矩阵与标量相乘
res_data = [[0] * self.shape[1] for i in range(self.shape[0])]
for i in range(self.shape[0]):
for j in range(self.shape[1]):
res_data[i][j] = scalar * self.data[i][j]
return Matrix(res_data)

def __truediv__(self, scalar):
# 矩阵除以标量
res_data = [[0] * self.shape[1] for i in range(self.shape[0])]
for i in range(self.shape[0]):
for j in range(self.shape[1]):
res_data[i][j] = self.data[i][j] / scalar
return Matrix(res_data)

def __str__(self):
# 以矩阵形式输出
return str(self.data)

def transpose(self):
# 矩阵转置
res_data = [[0] * self.shape[0] for i in range(self.shape[1])]
for i in range(self.shape[1]):
for j in range(self.shape[0]):
res_data[i][j] = self.data[j][i]
return Matrix(res_data)

def det(self):
# 计算矩阵行列式
if self.shape[0] != self.shape[1]:
raise ValueError("矩阵不是方阵")
return np.linalg.det(self.data)

def trace(self):
# 计算矩阵迹
if self.shape[0] != self.shape[1]:
raise ValueError("矩阵不是方阵")
return np.trace(self.data)

def eigen(self):
# 计算矩阵特征值和特征向量
if self.shape[0] != self.shape[1]:
raise ValueError("矩阵不是方阵")
eigen_values, eigen_vectors = np.linalg.eig(self.data)
return eigen_values, eigen_vectors

if __name__ == "__main__":
mat1 = Matrix([[1, 2], [3, 4]])
mat2 = Matrix([[5, 6], [7, 8]])
print(mat1 + mat2) # 输出矩阵mat1和mat2的和
print(mat1 - mat2) # 输出矩阵mat1和mat2的差
print(mat1 * mat2) # 输出矩阵mat1和mat2的乘积
print(3 * mat1) # 输出标量与矩阵mat1的积
print(mat1.transpose()) # 输出矩阵mat1的转置
print(mat1.det()) # 输出矩阵mat1的行列式
print(mat1.trace()) # 输出矩阵mat1的迹
print(mat1.eigen()) # 输出矩阵mat1的特征值和特征向量

 

标签:__,res,self,矩阵,shape,计算,data
From: https://www.cnblogs.com/yunbianshangdadun/p/17499245.html

相关文章

  • 清华大学计算机学科推荐学术会议和期刊列表
    包含高性能计算、计算机网络、网络与信息安全、理论计算机科学、系统软件与软件工程、数据库与数据挖掘、人工智能与模式识别、计算机图形学与多媒体、人机交互与普适计算、综合与交叉等,涉及的相关国际会议也非常的多。本资源整理自清华大学计算机学科推荐学术会议和期刊列表,包......
  • Python 设计一个简单的计算器
    Python设计一个简单的计算器设计目标实现加减乘除及拓号优先级解析用户输入1-2*((6-3+(-5/5)*(9-2*3/3+7/3*7/4*12+10*5/5))-(-4*3)/(12-3*2))等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致......
  • 计算机科学|人工智能相关领域历史最全免费课程整理分享
        计算机科学是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。计算机科学包含很多分支领域;有些强调特定结果的计算,比如计算机图形学;而有些是探讨计算问题的性质,比......
  • PTA6-8次题目集(成绩计算系列)总结
    1.前言6-8次作业题量不大,难度较菜单计价较小,但实现过程依旧繁琐知识点输入和输出处理:你需要从用户或文件中读取输入数据(课程信息和学生成绩),然后相应地进行处理。你可以使用诸如读取控制台输入(Scanner 类)或从文件读取技术。字符串操作和解析:你需要将输入的字符串分割后提......
  • 计算机学科必读-现代中央处理器的性能分析与调试-分享
    本书介绍    本书主要对那些处理性能关键的应用程序和进行低级优化的软件开发人员编写。仅举几个领域为例:高性能计算、游戏开发、数据中心应用(如脸书、谷歌等)。但本书的范围并不限于上述行业。    本书对于任何想要更好地理解他们的应用程序的性能并知道如何对其进行诊......
  • 邻接矩阵表示法
    邻接矩阵表示法使用邻接矩阵创建无向图需要一个顶点表和邻接矩阵邻接矩阵的存储结构采用邻接矩阵建立无向网输入总顶点数和总边数。输入点的信息存入顶点表中。初始化化为邻接矩阵,使每个权值初始化为极大值。构造邻接矩阵算法实现在图中查找顶点代码实现#inclu......
  • 平面变压器及损耗计算方式
    未完待续~~~该文用于记录总结平面变压器相关知识,欢迎大家多多指导。 1、平面变压器特点 目前,开关电源朝着高频化,高功率密度方向发展。高频变压器也朝着平面化,集成化的方向发展。与传统的高频变压器相比,平面变压器有以下特点: 高度低,容易做大功率密度磁芯表面......
  • Transformer在计算机视觉中应用论文大全整理分享
       Transformer是一种基于encoder-decoder结构的模型,它抛弃了以往的seq2seq模型中的RNN,采用Self—attention或者Mulit-head-self-attention使得输入的数据可以并行处理,提高运行效率。本资源整理了Transformer在计算机视觉各个领域应用的论文,分享给需要的朋友。内容截图......
  • Transformer及其变体模型在计算机视觉领域应用论文盘点
       AttentionIsAllYouNeed是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型,叫Transformer,抛弃了以往深度学习任务里面使用到的CNN和RNN,目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本......
  • postgresql获取基于当前时间计算的当月第一天,最后一天,下个月的第n天等功能
    问题现象:​今天在项目开发中遇到了一个需求,在编写某个功能时,需要使用到基于某个时间(如当前时间),去获取本月第一天或下个月的第一天的数据.问题分析:通过查询资料可以得知,要实现这个需求并不容易,在sql语句中就能很好的获取到,这里我使用的是postgresql数据库,其他数......