用Python自己写一个简单的矩阵运算类(只实现矩阵加法和乘法)

介绍

这是一道面试时的编程题。我们要在Python中实现一个简单的二维矩阵运算类,该类可以将双层列表初始化为二维矩阵,并可以进行矩阵加法和矩阵乘法。
我们使用assert断言来判断初始化时输入的是否是列表,在进行矩阵加法和矩阵乘法时也使用断言来判断两个矩阵的维度是否满足要求。需要注意的是,为了使矩阵运算更具有通用性,矩阵加法和乘法的结果也应初始化为我们写的矩阵类,这样可以连续进行多次加法和乘法。

Python代码实现

class Matrix(object):
	def __init__(self, list_a):
		assert isinstance(list_a, list), "输入格式不是列表"

		self.matrix = list_a
		self.shape = (len(list_a), len(list_a[0]))
		self.row = self.shape[0]
		self.column = self.shape[1]

	def build_zero_value_matrix(self, shape):
		"""
		建立零值矩阵用来保存矩阵加法和乘法的结果
		:param shape: 
		:return: 
		"""
		assert isinstance(shape, tuple), "shape格式不是元组"

		zero_value_mat = []
		for i in range(shape[0]):
			zero_value_mat.append([])
			for j in range(shape[1]):
				zero_value_mat[i].append(0)

		zero_value_matrix = Matrix(zero_value_mat)

		return zero_value_matrix

	def matrix_addition(self, the_second_mat):
		"""
		矩阵加法
		:param the_second_mat: 
		:return: 
		"""
		assert isinstance(the_second_mat, Matrix), "输入的第二个矩阵不是矩阵类"
		assert the_second_mat.shape == self.shape, "两个矩阵维度不匹配,不能相加"

		result_mat = self.build_zero_value_matrix(self.shape)

		for i in range(self.row):
			for j in range(self.column):
				result_mat.matrix[i][j] = self.matrix[i][j] + the_second_mat.matrix[i][j]

		return result_mat

	def matrix_multiplication(self, the_second_mat):
		"""
		矩阵乘法
		:param the_second_mat: 
		:return: 
		"""
		assert isinstance(the_second_mat, Matrix), "输入的不是矩阵类"
		assert self.shape[1] == the_second_mat.shape[0], "第一个矩阵的列数与第二个矩阵的行数不匹配,不能相乘"

		shape = (self.shape[0], the_second_mat.shape[1])
		result_mat = self.build_zero_value_matrix(shape)

		for i in range(self.shape[0]):
			for j in range(the_second_mat.shape[1]):
				number = 0
				for k in range(self.shape[1]):
					number += self.matrix[i][k] * the_second_mat.matrix[k][j]
				result_mat.matrix[i][j] = number

		return result_mat


list_1 = [[1, 1], [2, 2]]
list_2 = [[2, 2], [3, 3]]
list_3 = [[1, 1, 1], [2, 2, 2]]

mat1 = Matrix(list_1)
mat2 = Matrix(list_2)
print(mat1.matrix, mat2.matrix)
mat4 = mat1.matrix_addition(mat2)
print(mat4.matrix)

mat3 = Matrix(list_3)
print(mat3.matrix)
mat5 = mat1.matrix_multiplication(mat3)
print(mat5.matrix)
  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单Python 代码,实现了基本的矩阵加法、矩阵减法、矩阵数乘和矩阵乘法: ```python # 定义矩阵加法函数 def matrix_addition(matrixA, matrixB): if len(matrixA) != len(matrixB) or len(matrixA[0]) != len(matrixB[0]): return None result = [] for i in range(len(matrixA)): row = [] for j in range(len(matrixA[0])): row.append(matrixA[i][j] + matrixB[i][j]) result.append(row) return result # 定义矩阵减法函数 def matrix_subtraction(matrixA, matrixB): if len(matrixA) != len(matrixB) or len(matrixA[0]) != len(matrixB[0]): return None result = [] for i in range(len(matrixA)): row = [] for j in range(len(matrixA[0])): row.append(matrixA[i][j] - matrixB[i][j]) result.append(row) return result # 定义矩阵数乘函数 def matrix_scalar_multiplication(matrix, scalar): result = [] for i in range(len(matrix)): row = [] for j in range(len(matrix[0])): row.append(matrix[i][j] * scalar) result.append(row) return result # 定义矩阵乘法函数 def matrix_multiplication(matrixA, matrixB): if len(matrixA[0]) != len(matrixB): return None result = [] for i in range(len(matrixA)): row = [] for j in range(len(matrixB[0])): sum = 0 for k in range(len(matrixB)): sum += matrixA[i][k] * matrixB[k][j] row.append(sum) result.append(row) return result # 测试代码 A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] B = [[9, 8, 7], [6, 5, 4], [3, 2, 1]] print(matrix_addition(A, B)) print(matrix_subtraction(A, B)) print(matrix_scalar_multiplication(A, 2)) print(matrix_multiplication(A, B)) ``` 输出结果如下: ``` [[10, 10, 10], [10, 10, 10], [10, 10, 10]] [[-8, -6, -4], [-2, 0, 2], [4, 6, 8]] [[2, 4, 6], [8, 10, 12], [14, 16, 18]] [[30, 24, 18], [84, 69, 54], [138, 114, 90]] ``` 希望这个代码能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值