如何创建支持实例间加法与乘法运算的Vector类
实现支持加法和点积的Vector类
没问题,我来帮你实现这个符合需求的Vector类,完全支持你要的逐元素加法和点积乘法逻辑:
完整代码实现
class Vector: def __init__(self, values): # 存储向量值,假设输入是合法的数字列表 self.values = values def __add__(self, other): # 加法前检查两个向量长度是否一致 if len(self.values) != len(other.values): raise ValueError("向量长度必须一致才能进行加法运算") # 逐元素相加,返回新的Vector实例 new_values = [a + b for a, b in zip(self.values, other.values)] return Vector(new_values) def __mul__(self, other): # 点积运算前检查两个向量长度是否一致 if len(self.values) != len(other.values): raise ValueError("向量长度必须一致才能进行点积运算") # 计算点积并返回结果 dot_product = sum(a * b for a, b in zip(self.values, other.values)) return dot_product def get_vals(self): # 返回向量值的副本,避免外部修改原实例的数据 return self.values.copy()
代码说明
__init__方法:构造函数,接收一个数字列表并存储为实例变量。如果需要更严谨的话,可以添加输入验证(比如检查所有元素都是数字),这里先保持简洁满足你的需求。__add__方法:重载+运算符,实现逐元素加法。首先检查两个向量长度是否相同(不同长度的向量无法相加),然后通过列表推导式和zip函数配对元素相加,最后返回一个新的Vector实例。__mul__方法:重载*运算符,实现向量点积。同样先检查长度一致性,然后计算对应元素乘积的和并返回结果。get_vals方法:返回向量值的副本,这样外部修改返回的列表不会影响原Vector实例内部的数据。
测试示例
按照你的需求测试代码:
v1 = Vector([1, 2, 1, 5]) v2 = Vector([2, 3, 1, 4]) # 测试加法运算 v3 = v1 + v2 print(v3.get_vals()) # 输出: [3, 5, 2, 9] # 测试点积运算 print(v1 * v2) # 输出: 29
运行结果完全符合你的预期。如果之后需要扩展功能(比如支持标量乘法、向量减法等),可以在这个基础上继续修改。
内容的提问来源于stack exchange,提问作者pawciopl
相关产品推荐
相关产品推荐

