python类向量,从三维变为ndimension

2024-04-29 07:41:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个类来计算三维向量的一些运算,我是否可以修改代码,使它计算相同的运算,但对于任意维的向量n?你知道吗

import sys

class Vector:
  def __init__(self,x,y,z):
    self.x= x
    self.y= y
    self.z= z
  def __repr__(self):
    return "(%f,%f,%f)"%(self.x,self.y,self.z)
  def __add__(self,other):
    return (self.x+other.x,self.y+other.y,self.z+other.z)
  def __sub__(self,other):
    return (self.x-other.x,self.y-other.y,self.z-other.z)
  def __norm__(self):
    return (self.x**2+self.y**2+self.z**2)**0.5
  def escalar(self,other):
    return (self.x*other.x+self.y*other.y+self.z*other.z)
  def __mod__(self,other):
    return (self.x%other.x,self.y%other.y,self.z%other.z)
  def __neg__(self):
    return (-self.x,-self.y,-self.z)

Tags: 代码importselfaddnormreturninitdef
2条回答

例如,对于n维向量

class Vector:
    def __init__(self, components):
        self.components = components # components should be a list 

    def __add__(self, other):
        assert len(other.components) == len(self.components)
        added_components = []
        for i in range(len(self.components)):
            added_components.append(self.components[i] + other.components[i])
        return Vector(added_components)

    def dimensions(self):
        return len(self.components)

这是可能的。请注意,__add__重写返回一个新的Vector实例,而不是您的案例中的tuple。然后同样地调整你的其他方法。你知道吗

有更多的'聪明'的方法adding elements from two lists, into a third。如果性能是一个问题(或者在任何其他情况下只是一个练习,IMO),那么你真的不应该这样做。看看numpy。你知道吗

使用列表来存储系数,而不是显式变量。对于求反、加、减等,你只需在列表上迭代。你知道吗

在初始化方面,需要使用*args作为输入。请看这篇文章,了解它的工作原理:https://stackoverflow.com/a/3394898/1178052

相关问题 更多 >