python3 定義向量運算


from math import hypot

#定義向量的構造方法
class Vector:
    def __init__(self,x=0,y=0):
        self.x=x;
        self.y=y;
    '''
    __repr__是python的內置方法,他能將一個對象用字符串的形式表達出來
    %r用rper()方法處理對象  輸出結果  'content'
    %s用str()方法處理對象   輸出結果   content  不帶引號
    如果你只想實現這兩個特殊方法中的一個,__repr__ 是更好的選擇,因為如果一個對象
    沒有 __str__ 函數,而 Python 又需要調用它的時候,解釋器會用 __repr__ 作為替代
    '''

    def __repr__(self):
        return 'Vector(%r,%r)' % (self.x,self.y)
    '''
    定義__abs__方法
    返回hypot函數的運算結果
    hypot() 返回歐幾里德范數 sqrt(x*x + y*y)。
    '''
    def __abs__(self):
        return hypot(self.x,self.y)
    '''
    bool(abs(self)) 把模值變成了布爾值
    我們對 __bool__ 的實現很簡單,如果一個向量的模是 0,
    那么就返回 False,其他情況則返回 True。
    
    如果想讓 Vector.__bool__ 更高效,可以采用這種實現:
    def __bool__(self):
        return bool(self.x or self.y)
    '''
    def __bool__(self):
        return  bool(abs(self))
    '''
    __add__ 和 __mul__,這兩個方法的返回值都是新創建的向量對象,
    other代表其他向量對象,
    其返回值都是靠運算符 + 或者 * 實現的運算結果
    
    '''
    def __add__(self, other):
        x=self.x+other.x
        y=self.y+other.y

        return Vector(x,y)

    def __mul__(self,scalar):
        return Vector(self.x*scalar,self.y*scalar)

    #創建兩個向量實例  v1   v2
print('=============================輸出兩個向量加運算========================')
v1=Vector(2,4)
v2=Vector(2,1)
print(v1+v2)
print('=============================輸出單個向量歐幾里德運算========================')
# 求該向量的歐幾里得范數
v=Vector(3,4)
print(abs(v))

print('=============================輸出單個向量的標量乘法運算========================')
print(v*3)
print(abs(v*3)) #  (3*3)(3*3) +(4*3)(4*3) 的結果開方

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM