簡體   English   中英

python類Vector,從3dimension更改為ndimension

[英]python class Vector, change from 3dimension to ndimension

我創建了這個類來計算3d向量的一些操作,無論如何我是否可以更改代碼以便它計算相同的操作但是對於任何維度的向量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)

作為一個例子,對於一個維度向量,像

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 然后同樣適應你的其他方法。

有更多“聰明”的方法可以將兩個列表中的元素添加到第三個列表中 如果性能是一個問題(或者在任何其他情況下,除了練習,IMO),你真的不應該這樣做。 看看numpy

使用列表存儲系數而不是顯式變量。 對於否定,添加,減去等,您只需迭代列表。

在初始化方面,您需要使用*args作為輸入。 看一下這篇文章,了解它的工作原理: https//stackoverflow.com/a/3394898/1178052

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM