python怎么定义向量类 | 您所在的位置:网站首页 › python怎么定义向量 › python怎么定义向量类 |
我一直在寻找一种在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 还有一点,为了简短起见,省略掉了。 到目前为止,一切都很好,但我有很多小的具体问题(而且可能会在问题出现时发布更多):是否有数字和序列类型的基类?如何处理它们?在 我怎样才能使这一切变得更Python-y呢?我想学习如何编写好的Python代码,所以如果你发现一些低效或丑陋的东西,请告诉我。在 精确性呢?由于python似乎只有在必要时才从整数转换为浮点,因此输入和输出通常是相同的类型。所以可能会有很大或很小的数字问题,但我现在真的不需要这些。我应该担心精度,还是python会为我这样做?自动转换为最大可能的类型会更好吗?那是哪一个?除此之外会发生什么?在 我想在一个涉及很多向量方程和函数的项目中使用n维向量,我希望能够使用数学教科书中常用的符号。如您所见,这是从元组继承的(为了便于构造、不变性和索引),并且为了使用(+、-、*、…)运算符,大多数内置函数都被重写。它们只在左操作数是vec时才起作用(我能改变它吗?)。乘法包括点积和标量积,如果两个向量都是三维的,pow也用于叉积 测试脚本: ^{pr2}$ 在0.135秒内调用50009个函数cProfile.run('testVec()') 在0.064秒内调用100009个函数 |
CopyRight 2018-2019 实验室设备网 版权所有 |