• 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) 的结果开方
  • 相关阅读:
    怎样使用jlink一键烧录整个flash Hi3518 a c e Hi3515 Hi3512
    阅读zepto.js的core中的Core methods
    linux下执行strlwr函数出错:ld returned 1 exit status
    POJ 3286 How many 0's?
    As long as Binbin loves Sangsang
    docker 的安装
    浅析JAVA设计模式之工厂模式(一)
    怎样在屏幕上显示多个alv
    链表的应用:单元多项式的加法、减法、乘法
    Android 开发中 iBeacon的使用
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9109786.html
Copyright © 2020-2023  润新知