python怎么定义向量类_python的用户定义向量类

这篇博客介绍了作者在Python中定义向量类的过程,包括加法和乘法操作的实现,以及对于数字和序列类型的处理。作者探讨了Python中的类型转换、精度问题,并分享了一个测试脚本来评估向量类的性能。博客还提到了向量类可以支持数学公式中的常见操作,并希望得到关于编写更高效Python代码的建议。
摘要由CSDN通过智能技术生成

我一直在寻找一种在python中处理向量的方法,但在这里或文档中没有找到完全适合我的解决方案。在

到目前为止,我为一个向量类得出的结论是:class vec(tuple):

def __add__(self, y):

if len(self)!=len(y):

raise TypeError

else:

ret=[]

for i,entry in enumerate(self):

ret.append(entry+y[i])

return vec(ret)

def __mul__(self, y):

t=y.__class__

if t == int or t==float:

#scalar multiplication

ret=[]

for entry in self:

ret.append(y*entry)

return vec(ret)

elif t== list or t==tuple or t==vec:

# dot product

if len(y)!=len(self):

print 'vecs dimensions dont fit'

raise TypeError

else:

ret=0

for i,entry in enumerate(self):

ret+=entry*y[i]

return ret

还有一点,为了简短起见,省略掉了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 Python 中的定义一个三维向量。下面是一个简单的例子: ```python class Vector3D: def __init__(self, x, y, z): self.x = x self.y = y self.z = z def __repr__(self): return f"({self.x}, {self.y}, {self.z})" def __add__(self, other): return Vector3D(self.x + other.x, self.y + other.y, self.z + other.z) def __sub__(self, other): return Vector3D(self.x - other.x, self.y - other.y, self.z - other.z) def __mul__(self, other): return Vector3D(self.x * other, self.y * other, self.z * other) def __rmul__(self, other): return Vector3D(self.x * other, self.y * other, self.z * other) def dot(self, other): return self.x * other.x + self.y * other.y + self.z * other.z def cross(self, other): return Vector3D(self.y * other.z - self.z * other.y, self.z * other.x - self.x * other.z, self.x * other.y - self.y * other.x) def magnitude(self): return (self.x ** 2 + self.y ** 2 + self.z ** 2) ** 0.5 ``` 这个包含了三个属性:x、y、z,表示三维向量的三个分量。同时,我们还定义了 __repr__ 方法,用于将向量对象转换为字符串形式进行输出。 在中,我们还定义了 __add__、__sub__、__mul__、__rmul__ 方法,用于向量的加减乘除等运算。同时,我们还定义了 dot 和 cross 方法,分别表示向量的点积和叉积运算。最后,我们还定义了 magnitude 方法,用于计算向量的模长。 使用这个,我们可以方便地进行三维向量的运算。例如: ```python v1 = Vector3D(1, 2, 3) v2 = Vector3D(4, 5, 6) # 向量加法 v3 = v1 + v2 print(v3) # 输出:(5, 7, 9) # 向量点积 dot_product = v1.dot(v2) print(dot_product) # 输出:32 # 向量叉积 cross_product = v1.cross(v2) print(cross_product) # 输出:(-3, 6, -3) # 向量模长 magnitude = v1.magnitude() print(magnitude) # 输出:3.7416573867739413 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值