线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法

这篇具有很好参考价值的文章主要介绍了线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、代码仓库

https://github.com/Chufeng-Jiang/Python-Linear-Algebra-for-Beginner/tree/main

二、向量的基本运算

2.1 加法

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.2 数量乘法

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.3 向量运算的基本性质

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.4 零向量

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.5 向量的长度

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.6 单位向量

单位向量叫做 u hat
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

2.7 点乘/内积:两个向量的乘法 --答案是一个标量

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习
线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

三、手写Vector代码

3.1 在控制台测试__repr__和__str__方法

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

3.2 创建实例测试代码

from playLA.Vector import Vector

if __name__ == "__main__":

    vec = Vector([5, 2])
    print(vec)
    print("len(vec) = {}".format(len(vec)))
    print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习

3.3 完整代码

线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法,线性代数python,线性代数,python,学习文章来源地址https://www.toymoban.com/news/detail-717878.html

Vector.py

import math
from ._globals import EPSILON
class Vector:

    def __init__(self, lst):
        """
        __init__ 代表类的构造函数
        双下划线开头的变量 例如_values,代表类的私有成员
        lst是个引用,list(lst)将值复制一遍,防止用户修改值
        """
        self._values = list(lst)

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

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

    def normalize(self):
        """
        归一化,规范化
        返回向量的单位向量
        此处设计到了除法: def __truediv__(self, k):
        """
        if self.norm() < EPSILON:
            raise ZeroDivisionError("Normalize error! norm is zero.")
        return Vector(self._values) / self.norm()
        # return 1 / self.norm() * Vector(self._values)
        # return Vector([e / self.norm() for e in self])

    def __truediv__(self, k):
        """返回数量除法的结果向量:self / k"""
        return (1 / k) * self

    @classmethod
    def zero(cls, dim):
        """返回一个dim维的零向量
        @classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的cls参数,可以来调用类的属性,类的方法,实例化对象等。
        """
        return cls([0] * dim)

    def __add__(self, another):
        """向量加法,返回结果向量"""
        assert len(self) == len(another), \
            "Error in adding. Length of vectors must be same."
        # 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, another):
        """向量减法,返回结果向量"""
        assert len(self) == len(another), \
            "Error in subtracting. Length of vectors must be same."
        return Vector([a - b for a, b in zip(self, another)])

    def __mul__(self, k):
        """返回数量乘法的结果向量:self * k"""
        return Vector([k * e for e in self])

    def __rmul__(self, k):
        """
        返回数量乘法的结果向量:k * self
        self本身就是一个列表
        """
        return self * k

    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):
        """打印显示:Vector([5, 2])"""
        return "Vector({})".format(self._values)

    def __str__(self):
        """打印显示:(5, 2)"""
        return "({})".format(", ".join(str(e) for e in self._values))

_globals.py

# 包中的变量,但是对包外不可见,因此使用“_”开头
EPSILON = 1e-8

main_vector.py

from playLA.Vector import Vector

if __name__ == "__main__":

    vec = Vector([5, 2])
    print(vec)
    print("len(vec) = {}".format(len(vec)))
    print("vec[0] = {}, vec[1] = {}".format(vec[0], vec[1]))

    vec2 = Vector([3, 1])
    print("{} + {} = {}".format(vec, vec2, vec + vec2))
    print("{} - {} = {}".format(vec, vec2, vec - vec2))

    print("{} * {} = {}".format(vec, 3, vec * 3))
    print("{} * {} = {}".format(3, vec, 3 * vec))

    print("+{} = {}".format(vec, +vec))
    print("-{} = {}".format(vec, -vec))

    zero2 = Vector.zero(2)
    print(zero2)
    print("{} + {} = {}".format(vec, zero2, vec + zero2))

    print("norm({}) = {}".format(vec, vec.norm()))
    print("norm({}) = {}".format(vec2, vec2.norm()))
    print("norm({}) = {}".format(zero2, zero2.norm()))

    print("normalize {} is {}".format(vec, vec.normalize()))
    print(vec.normalize().norm())

    print("normalize {} is {}".format(vec2, vec2.normalize()))
    print(vec2.normalize().norm())

    try:
        zero2.normalize()
    except ZeroDivisionError:
        print("Cannot normalize zero vector {}.".format(zero2))
    print("========点乘:========")
    print(vec.dot(vec2))

main_numpy_vector.py

import numpy as np

if __name__ == "__main__":

    print(np.__version__)

    # np.array 基础
    print("========np.array 基础========")
    lst = [1, 2, 3]
    lst[0] = "Linear Algebra"
    print(lst)
    print("========vec = np.array([1, 2, 3])========")
    vec = np.array([1, 2, 3])
    print(vec)
    # vec[0] = "Linear Algebra"
    # vec[0] = 666
    # print(vec)
    print("========np.array的创建========")
    # np.array的创建
    print(np.zeros(5))
    print(np.ones(5))
    print(np.full(5, 666))
    print("========np.array的基本属性========")
    # np.array的基本属性
    print(vec)
    print("size =", vec.size)
    print("size =", len(vec))
    print(vec[0])
    print(vec[-1])
    print(vec[0: 2])
    print(type(vec[0: 2]))
    print("========np.array的基本运算========")
    # np.array的基本运算
    vec2 = np.array([4, 5, 6])
    print("{} + {} = {}".format(vec, vec2, vec + vec2))
    print("{} - {} = {}".format(vec, vec2, vec - vec2))
    print("{} * {} = {}".format(2, vec, 2 * vec))
    print("没有数学意义的乘法:{} * {} = {}".format(vec, vec2, vec * vec2))
    print("{}.dot({}) = {}".format(vec, vec2, vec.dot(vec2)))
    print("========求模========")
    print(np.linalg.norm(vec))
    print("========归一化========")
    print(vec / np.linalg.norm(vec))
    print("========单位向量========")
    print(np.linalg.norm(vec / np.linalg.norm(vec)))
    print("========零向量会报错========")
    zero3 = np.zeros(3)
    print(zero3 / np.linalg.norm(zero3))

到了这里,关于线性代数-Python-01:向量的基本运算 - 手写Vector及numpy的基本用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵

    本系列文章将从下面不同角度解析线性代数的本质,本文是本系列第一篇 向量究竟是什么? 向量的线性组合,基与线性相关 矩阵与线性相关 矩阵乘法与线性变换 三维空间中的线性变换 行列式 逆矩阵,列空间,秩与零空间 克莱姆法则 非方阵 点积与对偶性 叉积 以线性变换

    2024年02月04日
    浏览(54)
  • 线性代数(三) 线性方程组&向量空间

    如何利用行列式,矩阵求解线性方程组。 用矩阵方程表示 齐次线性方程组:Ax=0; 非齐次线性方程组:Ax=b. 可以理解 齐次线性方程组 是特殊的 非齐次线性方程组 如何判断线性方程组的解 其中R(A)表示矩阵A的秩 B表示A的增广矩阵 n表示末知数个数 增广矩阵 矩阵的秩 秩r= 未知

    2024年02月13日
    浏览(46)
  • 线性代数 --- 向量的长度

    从代数的角度定义向量的长度 :       正如我在另外一篇文章中(见本文底部的推荐链接)提到的,两个向量(这是默认是两个列向量)的内积,可以表示为也可以表示为。现在我们考虑一种特殊情形,现在我们有一个向量v=(1,2,3),那么这个向量自己和自己的内积是多少呢

    2024年02月02日
    浏览(43)
  • 线性代数之向量组

    文章目录 前言 一、定义与定理 1、定义 1.1、n维向量 1.2、线性组合 1.3、线性表示(出)   1.4、线性相关 1.5、线性无关 2、判别线性相关的七大定理 2.1、定理一: 2.2、定理二: 2.3、定理三: 2.4、定理四: 2.5、定理五: 2.6、定理六: 2.7、定理七: 二、具体型向量关系 1.与

    2024年03月26日
    浏览(50)
  • 线性代数基础【3】向量

    一、基本概念 ①向量 ②向量的模(长度) ③向量的单位化 ④向量的三则运算 ⑤向量的内积 二、向量运算的性质 (一)向量三则运算的性质 α + β = β + α α + (β + γ) = (α + β) + γ k (α + β) = kα + kβ (k + l) α = kα + lα (二)向量内积运算的性质 (α , β) = (β , α) = α^Tβ = β^Tα (α , α)

    2024年02月03日
    浏览(50)
  • 线性代数基础--向量

    目录 向量的概念 基本概念 抽象概念 向量的意义  几何意义 物理意义 欧式空间 特点和性质  行向量与列向量 行向量 列向量 两者的关系 向量的基本运算与范数 向量的基本运算 向量的加法 数乘运算(实数与向量相乘) 转置 向量的范数 向量的模与内积 向量的模 向量的内积

    2024年02月11日
    浏览(57)
  • 线性代数(一)——向量基础

    线性代数的核心是向量的加和乘两种运算的组合,本篇博客为线性代数的一个引子,主要从向量、线性组合和矩阵逐步引出线性代数的相关知识。 首先介绍的是向量相关,向量是基础。 已知列向量: υ = [ v 1 v 2 ] boldsymbol{upsilon}=left[begin{matrix} v_1 \\\\ v_2end{matrix} right] υ =

    2024年03月21日
    浏览(50)
  • 机器学习-线性代数-向量、基底及向量空间

    理解 直观理解 行向量:把数字排成一行A = [ 4   5 ] [4~ 5] [ 4   5 ] 列向量:把数字排成一列A =   [ 4 5 ] left [ begin{matrix} 4 \\\\ 5 \\\\ end{matrix} right ]   [ 4 5 ​ ] 几何意义 默认在基底条件下(直角坐标系)中的坐标表示的一个点,也可以理解以原点为起点,到目标终点A的有向线段

    2024年02月06日
    浏览(61)
  • 【线性代数】向量组的线性相关性

    目录 一、图解向量组的线性相关性 1. 向量组线性相关的定义  2.三维空间中向量组线性相关的几何意义 3.向量组线性相关与齐次线性方程组 二、向量组线性相关的基本结论 三、向量组线性相关性总结 做出向量组A与向量组B的图如下: 旋转图形得到:  旋转后发现,向量组

    2024年02月04日
    浏览(47)
  • 线性代数(魏福义)——第一章:向量与线性空间

    坐标系中可使用向量处理几何与运动学的问题,一般使用到二维或者三维有序数组,如(x,y)、(x,y,z),这样的数组称作 向量, 实际问题会用到更多维的向量。 1.1.1向量 以有序数组表示向量。n个数排成的有序数组就是n维向量。 α=(a1,a2,a3...,an)称为 行向量 ;将其

    2024年03月21日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包