线性代数

标量、向量、张量

  • 标量占据的是零维空间
  • 向量占据的是一维数据,例如语音信号
  • 矩阵占据的是二维数组,例如灰度图像
  • 张量占据的是三维乃至更高维的数组,例如RGB图像和视频

内积(点乘)概述

内积(inner product) 计算的则是两个向量之间的关系

两个相同维度向量内积的表达式为: 在这里插入图片描述
。 即对应元素乘积的求和

内积能够表示两个向量之间的相对位置,即向量之间的夹角。一种特殊的情况是内积为0,即(X, Y) = 0,,在二维空间上,这意味两个向量的夹角为90度,互相垂直

而在高维空间上,这种关系被称为正交(orthogonality)。如果两个向量正交,说明他们线性无关,相互独立,互不影响

正交基

如果有一个集合,它的元素都是具有相同维数的向量(可以是有限个或无限个),并且定义了加法和数乘等结构化的运算,这样的集合就称为线性空间(liner space),定义了内积运算的线性空间则被称为内积空间(inner product space)

在内积空间中,一组两两正交的向量构成这个空间的正交基(orthogonal basis),假若正交基中基向量的L2范数都是单位长度1,这组正交基就是标准正交基(orthonormal basis)

例子:在三维空间中,我们可以使用标准单位向量作为正交基,即:
i = [ 1   0   0 ] , j = [ 0   1   0 ] , k = [ 0   0   1 ] \mathbf{i} = \begin{bmatrix} 1 \ 0 \ 0 \end{bmatrix}, \quad \mathbf{j} = \begin{bmatrix} 0 \ 1 \ 0 \end{bmatrix}, \quad \mathbf{k} = \begin{bmatrix} 0 \ 0 \ 1 \end{bmatrix} i=[1 0 0],j=[0 1 0],k=[0 0 1]
这些向量两两之间的内积为零,即 i ⋅ j = i ⋅ k = j ⋅ k = 0 \mathbf{i} \cdot \mathbf{j} = \mathbf{i} \cdot \mathbf{k} = \mathbf{j} \cdot \mathbf{k} = 0 ij=ik=jk=0,并且它们的长度都是1,因此它们是标准正交基。

在更高维的空间中,比如四维空间,一个正交基可以是:
e 1 = [ 1   0   0   0 ] , e 2 = [ 0   1   0   0 ] , e 3 = [ 0   0   1   0 ] , e 4 = [ 0   0   0   1 ] \mathbf{e_1} = \begin{bmatrix} 1 \ 0 \ 0 \ 0 \end{bmatrix}, \quad \mathbf{e_2} = \begin{bmatrix} 0 \ 1 \ 0 \ 0 \end{bmatrix}, \quad \mathbf{e_3} = \begin{bmatrix} 0 \ 0 \ 1 \ 0 \end{bmatrix}, \quad \mathbf{e_4} = \begin{bmatrix} 0 \ 0 \ 0 \ 1 \end{bmatrix} e1=[1 0 0 0],e2=[0 1 0 0],e3=[0 0 1 0],e4=[0 0 0 1]
这些向量同样是两两正交的,并且长度为1,因此它们构成了四维空间的正交基。

线性变换

在数学和物理学中,当我们描述一个点在空间中移动时,可以用向量来表示这个点的位置

如果这个点从一个位置移动到另一个位置,那么表示这个点位置的向量也会随之改变。这种改变可以通过一种数学工具–矩阵来实现,这种改变称为线性变换

线性变换具有以下特点:

  • 向量经过线性变换后,其坐标按照一定的数学规则进行变换
  • 线性变换保持向量之间的线性关系,例如,线性变换前后,两个向量的和的变换等于它们各自变换后的和

转置矩阵

转置矩阵是指将原矩阵的行和列进行相互得到的新矩阵

转置矩阵的作用:

  • 坐标变换: 在计算机图形学中,转置矩阵常用于变换坐标系统。例如,当一个物体的坐标需要根据相机或观察者的角度进行变化时-
  • 简化计算: 在解线性方程组时,转置矩阵可以用来简化计算过程,特别是在使用行列式和逆矩阵时
  • 矩阵乘法: 当需要计算两个矩阵的乘积时,转置矩阵的概念很有用,因为 (AB)^{T} = B^{T}A^{T} ,这个性质有时可以减少计算量
原矩阵:
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])
        
 
 转置矩阵:
 tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11],
        [12, 13, 14, 15],
        [16, 17, 18, 19]])

逆矩阵

逆矩阵是指对于给定的方阵(行数和列数相等的矩阵)X,存在另一个矩阵X^-1,使得两者相乘的结果等于单位矩阵I。数学上表示为
X ⋅ X − 1 = X − 1 ⋅ X = I X \cdot X^{-1} = X^{-1} \cdot X = I XX1=X1X=I

对称矩阵(symmetric matrix)

对称矩阵是指一个方阵,其行和列数量相等,且满足

X = X T X = X^{T} X=XT

在这里插入图片描述

B = torch.tensor([[1, 2, 3], [2, 0, 4], [3, 4, 5]])
B
tensor([[1, 2, 3],
        [2, 0, 4],
        [3, 4, 5]])
        
B == B.T
tensor([[True, True, True],
        [True, True, True],
        [True, True, True]])

特征值(eigenvalue)和特征向量(eigenvector)

描述矩阵的一对重要参数是特征值(eigenvalue) 和 特征向量(eigenvector). 对于给定的矩阵A,假设其特征值是λ,特征向量为x,它们的关系为:
在这里插入图片描述

矩阵代表了向量的变换,其效果通常对原始向量同时施加方向变化和尺度变化

如果一个矩阵只能伸缩一个向量,并不能改变向量的方向,那么这个向量就是矩阵的特征向量。特征是衡量事物的各个维度或者尺度,如果不停变化也就称不上特征了

矩阵特征值和特征向量的动态意义在于表示了变化的速度和方向。如果把矩阵所代表的变化看作奔跑的人,那么矩阵的特征值就代表了他奔跑的速度,特征向量代表了他奔跑的方向

奇异值分解

求解给定矩阵的特征值和特征向量的过程叫做特征值分解,但能够进行特征值分解的矩阵必须是 n 维方阵

范数

范数(norm) 是对单个向量大小的度量,描述的是向量自身的性质,其作用是将向量映射为一个非负的数值

通用的 L^p 范数定义如下:
在这里插入图片描述

对一个给定向量

  • L^1 范数计算的是向量所有元素绝对值的和
  • L^2范数计算的是通常意义上的向量长度
  • L^∞ 范数计算的则是向量中最大元素的取值

范数计算的是单个向量的尺度,内积(inner product)计算的则是两个向量的关系

代码实现

内积例子

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

inner_product = np.sum(A.T * B)
print(inner_product)  # 输出结果应该是70
        

正交基例子

在三维空间中,可以通过经度、纬度、和海拔高度来确定一个确切的位置,因为这三个坐标轴构成一套明确的参考系。

然而,当我们进入更高维的空间时,这种直观的坐标系定义就不再适用了,因为高维空间超出了我们的直观感知

在高维空间中,使用正交基来确定位置,这是因为正交基能够为空间提供一套可以量化和计算坐标的系统

正交基是一组两两正交的向量,它们可以定义高维空间中的“经纬度”, 如果这些向量还是标准正交基(即长度为1),那么它们可以更方便地用于表示和计算点在空间中的位置

import numpy as np

# 假设我们有以下的标准正交基,这里以三维空间为例
# 注意:实际使用中,正交基的数量应与空间的维度一致
orthogonal_basis = np.array([
    [1, 0, 0],  # x轴方向的基向量
    [0, 1, 0],  # y轴方向的基向量
    [0, 0, 1]   # z轴方向的基向量
])

# 我们要表示的点的坐标,这里以三维空间中的一个点为例
point_coordinates = np.array([2, 3, 4])  # (x, y, z)坐标

# 使用正交基来表示这个点
# 这可以通过点乘正交基和点的坐标来实现
point_representation = np.dot(orthogonal_basis.T, point_coordinates)

print("点的表示(按照正交基展开的坐标):", point_representation)

        

线性变换

import numpy as np

# 定义一个点P在二维空间中的初始位置,用向量表示
point_p = np.array([2, 3])  # 向量 [2, 3]

# 定义一个线性变换矩阵A,例如旋转变换
# 这里我们定义一个旋转90度的变换矩阵
transform_matrix_a = np.array([[0, -1],  # 旋转变换矩阵
                              [1, 0]])

# 应用线性变换,计算点P变换后的位置
transformed_point_p = np.dot(transform_matrix_a, point_p)

print("变换前的点P坐标:", point_p)
print("变换后的点P坐标:", transformed_point_p)

        

矩阵的作用就是对正交基进行变换

矩阵可以用来改变空间中的参考框架,特别是当这个参考框架由正交基组成

正交基是一组相互垂直(在二维空间中是90度角,在高维空间中是相互点乘为0)的向量,它们定义了一个空间结构

当我们有一个向量在一个由正交基定义的空间中,通过左乘一个矩阵,我们可以将这个向量转换到另一个由不同正交基定义的空间中。这个矩阵定义了这两个空间之间的变换

import numpy as np

# 定义原始的正交基,这里以二维空间为例
b1 = np.array([1, 0])
b2 = np.array([0, 1])

# 打印原始基
print("原始正交基:")
print("b1 =", b1)
print("b2 =", b2)

# 定义一个变换矩阵,例如一个45度的旋转矩阵
theta = np.pi / 4  # 45度
A = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta), np.cos(theta)]])

# 应用变换矩阵到原始基上
b1_transformed = A.dot(b1)
b2_transformed = A.dot(b2)

# 打印变换后的基
print("\n变换后的正交基:")
print("b1_transformed =", b1_transformed)
print("b2_transformed =", b2_transformed)

        

特征向量例子

在一个线性变换中,如果一个矩阵对一个向量仅产生伸缩效果,而不会改变该向量的方向,那么这个向量被称为该矩阵的特征向量。

对于矩阵 ( A ) 和一个非零向量 ( v ),如果存在一个标量 ( lambda ) 使得 ( Av = lambda v ),那么 ( v ) 就是矩阵 ( A ) 的特征向量,对应的 ( lambda ) 是特征值


import numpy as np

# 定义一个矩阵 A
A = np.array([[4, 1], [2, 3]])

# 使用 NumPy 的 eig() 函数计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)

print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)

# 特征向量与特征值的验证
for i in range(len(eigenvalues)):
    v = eigenvectors[:, i]
    lambda_v = eigenvalues[i] * v
    Av = np.dot(A, v)
    print("验证特征向量 {} 和特征值 {}: \nA*v = {} \nlambda*v = {}".format(i+1, eigenvalues[i], Av, lambda_v))

        

在这个代码中,我们定义了一个矩阵 A,然后使用 np.linalg.eig() 函数来计算特征值和特征向量

输出将显示特征值和对应的特征向量,同时代码中的循环还对计算结果进行了验证,确保 ( Av ) 等于 ( \lambda v )

这表明,对于这些特征向量,矩阵 A 仅进行了伸缩变换,而没有改变它们的方向

转置矩阵例子

import numpy as np

# 创建一个4x3的矩阵A
A = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9],
              [10, 11, 12]])

# 转置矩阵A
A_T = np.transpose(A)

print("Original Matrix A:")
print(A)

print("\nTransposed Matrix A_T:")
print(A_T)

# 假设我们有一个向量v,我们想要计算A和v的点积
v = np.array([1, 0, 1])

# 使用A_T来计算点积,这实际上是对A的列向量进行点积操作
result = np.dot(A_T, v)

print("\nResult of A_T * v:")
print(result)
  

在这个例子中,我们创建了一个4x3的矩阵A,并计算了它的转置A_T。然后,我们使用转置矩阵A_T和向量v进行点积运算

逆函数例子

用2 * 2矩阵A来解释一些逆矩阵的算法。首先,交换a11和a22 位置,然后在a12 和 a21前加上负号,最后除以行列式a11a22 - a12a21

在这里插入图片描述

如何验证是不是正解?

方法很简单,
A ⋅ A − 1 = A − 1 ⋅ A = I A \cdot A^{-1} = A^{-1} \cdot A = I AA1=A1A=I
现在代入公式来验证,A和它的逆矩阵相乘

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

范数的例子

‘范数计算的是单个向量的尺度’,意思是,范数是用来衡量向量在某个向量空间中的长度或大小

范数给出一个数值,表示向量相对于其他向量的长度或大小

考虑一个二维空间中的向量 x = [3, 4],我们可以使用L2范数(也称为欧几里得范数或向量模)来计算这个向量的长度
∣ x ∣ 2 = 3 2 + 4 2 = 9 + 16 = 25 = 5 |x|_2 = \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5 x2=32+42 =9+16 =25 =5

这意味着向量 x 在二维空间中的长度为5。 L2范数是最常见的范数之一,它对应于向量在几何上的直观长度

另一个例子,使用L1范数(也称为曼哈顿范数)来计算同样的向量 x:
∣ x ∣ 1 = ∣ 3 ∣ + ∣ 4 ∣ = 3 + 4 = 7 |x|_1 = |3| + |4| = 3 + 4 = 7 x1=∣3∣+∣4∣=3+4=7

这里,L1范数给出了向量在各个维度上绝对值的和,即7。L1范数在某些情况下更有用,比如在稀疏数据处理中

参考资料

  • 特征值和特征向量到底是个啥?能做什么用?
  • 通俗易懂:对称矩阵

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/538822.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

掌握JMeter HTTP 请求头:简单易懂

在深入研究 JMeter 的过程中,任何涉及性能测试或接口验证的专业人员都会认识到,合理配置HTTP请求头部信息是实现精确测试的关键步骤之一。不同情景下,如数据提交形式的不同(例如 JSON、XML 等),或是需要通过…

利用正射影像对斜射图像进行反向投影

在图像投影和映射领域,有两种类型的投影:正向投影和反向投影。正向投影涉及使用内部方向(即校准相机参数)将 3D 点(例如地面上的物体)投影到 2D 图像平面上。另一方面,向后投影是指根据 2D 图像确定地面物体的 3D 坐标的过程。 为了匹配倾斜图像和正射影像并确定相机位置…

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用

Kubernetes(k8s):深入理解k8s中的亲和性(Affinity)及其在集群调度中的应用 1、什么是亲和性?2、节点亲和性(Node Affinity)2.1 硬性节点亲和性规则(required)…

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space leftondevice(

linux 磁盘分区Inode使用率达到100%,导致网站无法创建文件报错 failed:No space left on device 由于这问题直接导致了,网站无法正常运行! 提交工单求助阿里后,得到了答案! 工程师先让我执行 df -h 和 df -i 通过分析…

Harmony鸿蒙南向外设驱动开发-Codec

功能简介 OpenHarmony Codec HDI(Hardware Device Interface)驱动框架基于OpenMax实现了视频硬件编解码驱动,提供Codec基础能力接口给上层媒体服务调用,包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题1 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书,赛题,解析等资料,知识点培训服务 添加博主wx:liuliu548…

【微信小程序】canvas开发笔记

【微信小程序】canvasToTempFilePath:fail fail canvas is empty 看说明书 最好是先看一下官方文档点此前往 如果是canvas 2d 写canvas: this.canvas,,如果是旧版写canvasId: ***, 解决问题 修改对应的代码,如下所示,然后再试试运行&#x…

Java 基于微信小程序的汽车4S店客户管理小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Python——详细解析目标检测xml格式标注转换为txt格式

本文简述了目标检测xml格式标注的内容&#xff0c;以及yolo系列模型所需的txt格式标注的内容。并提供了一个简单的&#xff0c;可以将xml格式标注文件转换为txt格式标注文件的python脚本。 1. xml格式文件内容 <size>标签下为图片信息&#xff0c;包括 <width> …

排序算法之选择排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性选择排序O(n^2 )O(n^2)O(n^2)O(1)In-place不稳定 稳定&#xff1a;如果A原本在B前面&#xff0c;而AB&#xff0c;排序之后A仍然在B的前面&#xff1…

RREA论文阅读

Relational Reflection Entity Alignment 关系反射实体对齐 ABSTRACT 实体对齐旨在识别来自不同知识图谱(KG)的等效实体对&#xff0c;这对于集成多源知识图谱至关重要。最近&#xff0c;随着 GNN 在实体对齐中的引入&#xff0c;近期模型的架构变得越来越复杂。我们甚至在这…

低频电磁仿真 | 新能源汽车性能提升的利器

永磁同步电机 新能源汽车的心脏 近年来&#xff0c;全球变暖的趋势日益加剧&#xff0c;极端天气事件层出不穷&#xff0c;这些现象都反映出当前气候形势的严峻性。为了应对这一全球性挑战&#xff0c;各国纷纷采取行动&#xff0c;制定了一系列降碳、减碳的措施。中国在2020年…

PostgreSQL15 + PostGis + QGIS安装教程

目录 下载1、PostgreSQL安装1.1、环境变量配置 2、PostGIS安装2.1、安装插件 3、QGIS下载3.1、安装3.2、测试 下载 PostgreSQL15安装&#xff1a;下载地址 PostGIS安装&#xff1a;下载地址&#xff08;倒数第二个&#xff09; 1、PostgreSQL安装 下载安装包之后一直点下一步…

MySQL中的SQL高级语句[二]

使用语言 MySQL 使用工具 Navicat Premium 16 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 拖动表名到查询文件中就可以直接把名字拉进来以下是使用脚本方法&#xff0c;也可以直接进行修改中括号&#xff0c;就代表可写可不写 有些地方的代…

基于单片机的智能锁芯报警系统设计

摘 要:在传统的智能锁芯报警系统中,存在响应时间较长的问题,为此,提出一种基于单片机的智能锁芯报警系统。通过控制模块、智能锁芯设置模块、报警模块、中断模块、液晶模块等,建立系统总体框架,根据系统总体框架,通过单片机、电源适配器、智能锁芯、报警器、LED灯等…

CMake构建OpenCv并导入QT项目过程中出现的问题汇总

前言 再此之前请确保你的环境变量是否配置&#xff0c;这是总共需要配置的环境变量 E:\cmake\bin E:\OpenCv\opencv\build\x64\vc15\bin F:\Qt\Tools\mingw730_64\bin F:\Qt\5.12.4\mingw73_64\bin 问题一&#xff1a; CMake Error: CMake was unable to find a build program…

Docker 学习笔记(七):介绍 Dockerfile 相关知识,使用 Dockerfile 构建自己的 centos 镜像

一、前言 记录时间 [2024-4-12] 系列文章简摘&#xff1a; Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&#xff08;Centos7下安装docker、环境配置&#xff0c;以及镜像简单使用&#xff09; Docker 学习笔记&#xff08;三&#xff09;&#x…

51单片机入门_江协科技_27~28_OB记录的自学笔记_AT24C02数据存储秒表

27. AT24C02(I2C总线) 27.1. 存储器介绍 27.2. 存储器简化模型介绍&#xff0c;存储原理 27.3. AT24C02介绍 •AT24C02是一种可以实现掉电不丢失的存储器&#xff0c;可用于保存单片机运行时想要永久保存的数据信息 •存储介质&#xff1a;E2PROM •通讯接口&#xff1a;I2…

ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)

一、准备 系统&#xff1a;MacOS 14.3.1 ElasticSearch&#xff1a;8.13.2 Kibana&#xff1a;8.13.2 BGE是一个常见的文本转向量的模型&#xff0c;在很多大模型RAG应用中常常能见到&#xff0c;但是ElasticSearch中默认没有。BGE模型有很多版本&#xff0c;本次采用的是bg…

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件 往期回顾 【QT入门】Qt自定义控件与样式设计之QProgressBar用法及qss-CSDN博客 【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-CSDN博客 【QT入门】Qt自定义控件与样式设计之qss的加载方式-CSDN博客 一、最终…