当前位置: 首页 > news >正文

线性代数学习

向量:一组数的基本表示方法 和向量相对应,一个数字,成为标量 向量是线性代数研究的基本元素

import math
from ._global import EPSILON


class Vector:
    def __init__(self, lst):
        self._values = list(lst)  # 相当于复制了一次lst,使得这个类更符合不可更改类型

    @classmethod
    def zero(cls, dim):
        """返回一个dim维的零向量"""
        return cls([0] * dim)

    def norm(self):
        """返回向量的模"""
        return math.sqrt(sum(e ** 2 for e in self))

    def normalize(self):
        """返回向量的单位向量"""
        # if self.norm() == 0:
        if self.norm() < EPSILON:
            raise ZeroDivisionError("Normalize error! norm is zero!")
        # return Vector([e / self.norm() for e in self])
        return 1 / self.norm() * Vector(self._values)

    def __add__(self, another):
        """向量加法,返回结果向量"""
        assert len(self) == len(another), \
            "Error in adding. Length of vectors must be same."
        # 因为实现了__iter__,就不这样写了
        # return Vector([a + b for a, b in zip(self._values, another._values)])
        return Vector([a + b for a, b in zip(self, another)])

    def __sub__(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 __mul__(self, k):
        """返回数量乘法的结果向量:self * k"""
        return Vector([k * e for e in self])

    def dot(self, another):
        """向量点乘,返回结果标量"""
        assert len(self) == len(another), \
            "Error in adding. Length of vectors must be same."
        return sum(a * b for a, b in zip(self, another))

    def __rmul__(self, k):
        """返回数量乘法的结果向量:k * self"""
        return self * k

    def __truediv__(self, k):
        """返回梳理出发的结果向量: self / k """
        return (1 / k) * self

    def __pos__(self):
        """返回向量取正的结果向量"""
        return 1 * self

    def __neg__(self):
        """返回向量取负的结果向量"""
        return -1 * self

    def __iter__(self):
        """返回向量的迭代器"""
        return self._values.__iter__()

    def __getitem__(self, index):
        """取向量的第index个元素"""
        return self._values[index]

    def __len__(self):
        """返回向量长度(有多少个元素)"""
        return len(self._values)

    def __repr__(self):
        return "Vector({})".format(self._values)

    def __str__(self):
        return "({})".format(", ".join(str(e) for e in self._values))

复制代码

在实现这个向量类时,学习到很多实现细节:向量类设计为不可更改类(在加法运算时,返回新的类,而不是对原有的self._values进行更改)。 那在构造函数中,传入一个list,当list变化时,便会影响self._values的值。所以用list(lst)方式进行了一次复制。

向量的模:即向量的大小

单位向量:长度保持为1的向量

矩阵

矩阵是向量的拓展,就像向量是数的拓展

矩阵的基本运算:

相关文章:

  • [VSCode] Shortcuts
  • Cannot retrieve metalink for repository: epel 错误解决
  • gitlab4.0_安装
  • 前端知识由零开始总结工具书
  • 从零开始学java (多态)
  • 传统运维团队转型应该注意哪些问题?
  • Nginx WEB服务器反向代理(一)
  • 宇宙最帅XX--Alpha阶段项目复审
  • 中奖名单已出炉!速来围观,有没有你?
  • Java反编译工具Jad详解
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • ElasticSearch权威指南学习(排序)
  • HBase技术与应用实践 | HBase2.0重新定义小对象实时存取
  • d3
  • 将毫秒时间转换为yyyy-MM-dd HH:mm:ss格式
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Github访问慢解决办法
  • golang 发送GET和POST示例
  • js 实现textarea输入字数提示
  • Object.assign方法不能实现深复制
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Redis的resp协议
  • spring boot下thymeleaf全局静态变量配置
  • SQL 难点解决:记录的引用
  • Vim Clutch | 面向脚踏板编程……
  • Vue实战(四)登录/注册页的实现
  • 对JS继承的一点思考
  • 构建工具 - 收藏集 - 掘金
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 码农张的Bug人生 - 初来乍到
  • 前嗅ForeSpider采集配置界面介绍
  • 手写双向链表LinkedList的几个常用功能
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 一个项目push到多个远程Git仓库
  • Mac 上flink的安装与启动
  • 阿里云服务器购买完整流程
  • ###项目技术发展史
  • (145)光线追踪距离场柔和阴影
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Java数据结构)ArrayList
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三)docker:Dockerfile构建容器运行jar包
  • (正则)提取页面里的img标签
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • .NET MVC第三章、三种传值方式
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @vue/cli脚手架
  • [ NOI 2001 ] 食物链
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [AIGC] 使用Curl进行网络请求的常见用法