zoukankan      html  css  js  c++  java
  • 向量Vector

    import math
    
    
    class Vector:
        """向量"""
    
        @classmethod
        def zero(cls, dim):
            """dim长度的0向量"""
            return cls([0] * dim)
    
        def __init__(self, lst):
            self._values = list(lst)
    
        def __repr__(self):
            print('Vector({})'.format(self._values))
    
        def __str__(self):
            return '({})'.format(', '.join(str(e) for e in self._values))
    
        def __len__(self):
            return len(self._values)
    
        def dot(self, other):
            """向量点乘,返回结果标量"""
            assert len(self) == len(other), 
                "Error in dot product. Length of vectors must be same."
            return sum(a * b for a, b in zip(self, other))
    
        def normalize(self):
            """单位向量、归一化"""
            if self.norm() < 1e-8:
                raise ZeroDivisionError("Normalize error! norm is zero.")
            return Vector(self) / self.norm()
    
        def norm(self):
            """模"""
            return math.sqrt(sum(a ** 2 for a in self))
    
        def __pos__(self):
            """返回向量取正的结果向量 positive """
            return 1 * self
    
        def __neg__(self):
            """返回向量取负的结果向量 negative """
            return -1 * self
    
        def __getitem__(self, index):
            return self._values[index]
    
        def __add__(self, other):
            """向量加法,返回结果向量"""
            assert len(self) == len(other), 
                "Error in adding. Length of vectors must be same."
            return Vector([a + b for a, b in zip(self, other)])
    
        def __sub__(self, other):
            """向量减法,返回结果向量"""
            assert len(self) == len(other), 
                "Error in subtracting. Length of vectors must be same."
            return Vector([a - b for a, b in zip(self, other)])
    
        def __mul__(self, k):
            """数乘"""
            return Vector([a * k for a in self])
    
        def __rmul__(self, k):
            return self * k
    
        def __truediv__(self, k):
            return self * (1 / k)
    
        def __iter__(self):
            return self._values.__iter__()
    
    
  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    仿京东左侧菜单
    京东首页右侧固定层
    jQuery中的事件与动画
    javaScript(四)
  • 原文地址:https://www.cnblogs.com/fly-book/p/13389824.html
Copyright © 2011-2022 走看看