如何计算向量因子,所以取一个向量并自行乘以多次。我试过了vec=vector**4
,但得到了:
运行时错误(TypeErrorException):**不支持的操作数类型:' Vector3d'和' int'
答案 0 :(得分:1)
假设Vector3d
是您自己设计的类型,则需要明确添加对**
的支持。
如果查看Emulating numeric types的文档,您会发现需要编写的方法是:
object.__pow__(self, other[, modulo])
如果您对第三个参数感到困惑,__pow__
不仅用于**
运算符,还用于pow
函数,它带有可选的第三个参数用于模幂运算。如果您不想支持,可以忽略它。
现在,您如何实现向量求幂?好吧,如果你只关心整数权力,你总是可以通过重复的交叉产品来做到这一点。假设您已将*
运算符定义为跨产品:
class Vector3d(object):
# ... other methods ...
def __pow__(self, power):
if not isinstance(power, numbers.Integral) or other < 0:
# give power.__rpow__ a chance, just in case...
return NotImplemented
result = type(self)(1, 1, 1)
for _ in range(power):
result *= self
return result
如果你想能够将向量提升到真实,复杂或向量的力量,那么有几种不同的方法来定义这些东西,如果你不知道你想要哪一种,你可能需要在Math而不是StackOverflow上询问它。