深度学习基础 - 向量投影

news2024/11/13 16:03:15

深度学习基础 - 向量投影

flyfish

在这里插入图片描述

在这里插入图片描述

给定两个向量 a \mathbf{a} a b \mathbf{b} b,我们想要计算 a \mathbf{a} a b \mathbf{b} b 上的投影。

  1. 点乘 (Dot Product)
    点乘是一个标量,表示两个向量在相同方向上的程度。公式为:
    a ⋅ b = ∥ a ∥ ∥ b ∥ cos ⁡ θ \mathbf{a} \cdot \mathbf{b} = \| \mathbf{a} \| \| \mathbf{b} \| \cos \theta ab=a∥∥bcosθ

其中:

∥ a ∥ \| \mathbf{a} \| a 是向量 a \mathbf{a} a 的模(长度)。
∥ b ∥ \| \mathbf{b} \| b 是向量 b \mathbf{b} b 的模(长度)。
θ \theta θ 是向量 a \mathbf{a} a b \mathbf{b} b 之间的夹角。
cos ⁡ θ \cos \theta cosθ 表示 a \mathbf{a} a b \mathbf{b} b 方向上的分量。

在这里插入图片描述

  1. 模 (Magnitude or Length)
    向量的模是向量长度的度量:
    ∥ a ∥ = a 1 2 + a 2 2 + ⋯ + a n 2 \| \mathbf{a} \| = \sqrt{a_1^2 + a_2^2 + \cdots + a_n^2} a=a12+a22++an2

∥ b ∥ = b 1 2 + b 2 2 + ⋯ + b n 2 \| \mathbf{b} \| = \sqrt{b_1^2 + b_2^2 + \cdots + b_n^2} b=b12+b22++bn2
3. 向量投影 (Vector Projection) 向量 a \mathbf{a} a 在向量 b \mathbf{b} b 上的投影 proj b a \text{proj}_{\mathbf{b}} \mathbf{a} projba 的公式为: proj b a = ( a ⋅ b b ⋅ b ) b \text{proj}_{\mathbf{b}} \mathbf{a} = \left( \frac{\mathbf{a} \cdot \mathbf{b}}{\mathbf{b} \cdot \mathbf{b}} \right) \mathbf{b} projba=(bbab)b
或者,使用单位向量 b ^ \hat{\mathbf{b}} b^ proj b a = ( a ⋅ b ^ ) b ^ \text{proj}_{\mathbf{b}} \mathbf{a} = (\mathbf{a} \cdot \hat{\mathbf{b}}) \hat{\mathbf{b}} projba=(ab^)b^
其中 b ^ = b ∥ b ∥ \hat{\mathbf{b}} = \frac{\mathbf{b}}{\| \mathbf{b} \|} b^=bb b \mathbf{b} b 的单位向量。

关系分析

点乘和夹角 :通过点乘,可以计算两个向量之间的夹角 θ \theta θ cos ⁡ θ = a ⋅ b ∥ a ∥ ∥ b ∥ \cos \theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\| \mathbf{a} \| \| \mathbf{b} \|} cosθ=a∥∥bab

投影与点乘 :向量 a \mathbf{a} a b \mathbf{b} b 上的投影直接由点乘计算,因为它衡量了 a \mathbf{a} a b \mathbf{b} b 方向上的分量大小。
在这里插入图片描述

向量模 :向量的模提供了向量长度的信息。
在这里插入图片描述

示例

假设 a = [ a 1 , a 2 ] \mathbf{a} = [a_1, a_2] a=[a1,a2] b = [ b 1 , b 2 ] \mathbf{b} = [b_1, b_2] b=[b1,b2],计算向量 a \mathbf{a} a b \mathbf{b} b 上的投影:

  1. 点乘 a ⋅ b = a 1 b 1 + a 2 b 2 \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 ab=a1b1+a2b2

  2. b \mathbf{b} b 的模 ∥ b ∥ = b 1 2 + b 2 2 \| \mathbf{b} \| = \sqrt{b_1^2 + b_2^2} b=b12+b22

  3. 投影 proj b a = ( a 1 b 1 + a 2 b 2 b 1 2 + b 2 2 ) [ b 1 b 2 ] \text{proj}_{\mathbf{b}} \mathbf{a} = \left( \frac{a_1 b_1 + a_2 b_2}{b_1^2 + b_2^2} \right) \begin{bmatrix} b_1 \\ b_2 \end{bmatrix} projba=(b12+b22a1b1+a2b2)[b1b2]

绘图代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# 设置字体以支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 定义向量 a 和 b
a = np.array([3, 4])
b = np.array([5, 0])

# 计算向量 b 的单位向量
b_unit = b / np.linalg.norm(b)

# 计算向量 a 在 b 上的投影
a_proj_on_b = np.dot(a, b_unit) * b_unit

# 定义原点 O
O = np.array([0, 0])

# 计算点 A 和点 B 的坐标
A = a
B = b

# 计算投影点 P 的坐标
P = a_proj_on_b

# 绘制向量和点
plt.figure(figsize=(8, 6))

# 绘制向量 a
plt.quiver(O[0], O[1], a[0], a[1], angles='xy', scale_units='xy', scale=1, color='r', label=r'$\mathbf{a}$')

# 绘制向量 b
plt.quiver(O[0], O[1], b[0], b[1], angles='xy', scale_units='xy', scale=1, color='b', label=r'$\mathbf{b}$')

# 绘制向量 a 在 b 上的投影
plt.quiver(O[0], O[1], a_proj_on_b[0], a_proj_on_b[1], angles='xy', scale_units='xy', scale=1, color='g', linestyle='--', label=r'$\text{Projection of }\mathbf{a}\text{ on }\mathbf{b}$')

# 标注关键点和向量
plt.scatter(*A, color='r')
plt.text(A[0], A[1], 'A', fontsize=12, color='r', ha='right')
plt.scatter(*B, color='b')
plt.text(B[0], B[1], 'B', fontsize=12, color='b', ha='right')
plt.scatter(*P, color='g')
plt.text(P[0], P[1], 'P', fontsize=12, color='g', ha='right')
plt.text(O[0], O[1], 'O', fontsize=12, ha='right')

# 计算和标注夹角 θ
cos_theta = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
theta = np.arccos(cos_theta)

# 添加 θ 的弧线
arc = np.linspace(0, theta, 100)
r = 0.5
x_arc = r * np.cos(arc)
y_arc = r * np.sin(arc)
plt.plot(x_arc, y_arc, color='purple')
plt.text(r * np.cos(theta / 2), r * np.sin(theta / 2), r'$\theta$', fontsize=12, color='purple')

# 使用 Line2D 来绘制虚线,从 A 到 P
line = Line2D([A[0], P[0]], [A[1], P[1]], linestyle='--', dashes=(5, 5), linewidth=2, color='k')
ax = plt.gca()
ax.add_line(line)

# 设置图形参数
plt.xlim(-1, 6)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True, linestyle='--', alpha=0.5)
plt.gca().set_aspect('equal', adjustable='box')
plt.xlabel('x')
plt.ylabel('y')
plt.title('向量 $\mathbf{a}$ 在向量 $\mathbf{b}$ 上的投影')
plt.legend()

# 显示图形
plt.show()

plt.scatter 例子

import matplotlib.pyplot as plt

# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
sizes = [20, 50, 80, 200, 500]
colors = ['red', 'green', 'blue', 'orange', 'purple']

# 绘制散点图
plt.scatter(x, y, s=sizes, c=colors, alpha=0.6, edgecolors='w', linewidths=2, marker='o')

# 添加标题和标签
plt.title('Example Scatter Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')

# 显示图形
plt.show()

在这里插入图片描述

参数说明

基本参数

x: 数组或列表,指定 x 坐标。
y: 数组或列表,指定 y 坐标。

可选参数

s: 标量或数组,指定点的大小(默认 20)。
c: 颜色或颜色序列,指定点的颜色。
marker: 字符串,指定标记样式(如 ‘o’、‘s’)。
cmap: 字符串或 Colormap,用于数值颜色映射。
linewidths: 标量或数组,指定标记边缘宽度。
edgecolors: 颜色或颜色序列,指定边缘颜色(如 ‘face’、‘none’)。
alpha: 标量,指定透明度(0 到 1)。
label: 字符串,指定图例标签。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行为验证码热门行业解决方案

行为式验证码是一种较为流行的验证码。从字面来理解,就是通过用户的操作行为来完成验证,而无需去读懂扭曲的图片文字,以下是常见的案例。 ​​热门行业解决方案 教育解决方案 教育资源不断线上化,使得违法违规内容风险不断提高&…

最近在西安召开的学术会议:EI检索超快,信息系统与计算技术领域!

第十二届信息系统与计算技术国际会议(ISCTech 2024)将于2024年11月8日-11月11日在中国西安盛大举行,由长沙理工大学主办,同济大学、西北工业大学联合协办。会议聚焦信息系统与计算技术等相关研究领域,广泛邀请国内外知…

货运物流App项目开发功能介绍

货运小程序通常具备多种功能,以便于用户管理和跟踪货物运输。以下是一些常见的功能介绍: 注册和登录: 用户可以通过手机号码或邮箱注册并登录账户。 货物发布: 用户可以创建货运订单,填写货物信息(如品名、…

Proxmox vzdump backup ct vm

vzdump 参考 vzdump 备份参数参考 创建一键Proxmox vzdump 备份ct 虚拟机 vzdump 备份参数参考vmid 105 106 22-29行是环境变量,根据主机的实际情况更改ct 模板默认下载目录/var/lib/vz/template/cache所有备份默认目录/var/lib/vz/dumpiso 存放/var/lib/vz/template/iso# -*…

【扒代码】CCFF跨尺度特征融合

import torch import torch.nn as nn import torch.nn.functional as Fclass RepVggBlock(nn.Module):def __init__(self, ch_in, ch_out, actrelu):super().__init__()self.ch_in ch_in # 输入通道数self.ch_out ch_out # 输出通道数# 第一个卷积层,使用 3x3 卷…

iOS ------ UIKit相关

UIView和CALayer UIView UIView表示屏幕上的一块矩形区域,它是基本上iOS中所有可视化控件的父类。UIView可以管理矩形区域里的内容,处理矩形区域的事件,包括子视图的管理以及动画的实现。 UIKit相关类的继承关系 UIView继承自UIResponde…

封装加载(raect18+antd)

该组件主要是anted的组件中自带的loading属性&#xff0c; 1、封装loading组件 import React from react;function WithLoading(WrappedComponent: React.ComponentType<any>) {return (props: any) > {const [isLoading, setIsLoading] React.useState(true);Reac…

基于JAVA的高考智能排考场系统设计与实现,源码、部署+讲解

绪 论 随着教育规模的不断扩大和技术的进步&#xff0c;传统的考试管理方式面临着诸多挑战&#xff0c;如考试安排的复杂性、作弊现象的频发以及考试过程中的监督和管理等问题。因此&#xff0c;针对这些挑战&#xff0c;智能排考系统应运而生。 智能排考系统利用先进的技术…

接口基础知识5:详解request headers(一篇讲完常见字段)

课程大纲 一、请求头的定义 HTTP请求头部&#xff08;HTTP Request Headers&#xff09;&#xff1a;HTTP协议中的一部分&#xff0c;用于在客户端和服务器之间传递附加信息。这些头部字段提供了关于请求、客户端环境、或请求的上下文的信息。 请求头是键值对的形式&#xff…

day04-套餐管理

完成套餐管理模块所有业务功能&#xff0c;包括&#xff1a; 新增套餐套餐分页查询删除套餐修改套餐起售停售套餐 要求&#xff1a; 根据产品原型进行需求分析&#xff0c;分析出业务规则设计接口梳理表之间的关系&#xff08;分类表、菜品表、套餐表、口味表、套餐菜品关系…

element plus el-select修改后缀图标

使用 element plus 提供的api 默认为&#xff1a; 修改后为&#xff1a; 方法&#xff1a; <el-select v-model"value" placeholder"Select" size"large" style"width: 120px;":teleported"false" :suffix-icon"…

图数据库Neo4j的调研

图数据库Neo4j的调研 一、neo4j基础概述 概述 neo4j作为当下最热门的图数据库之一&#xff0c;他的底层实现是java语言&#xff0c;所以安装的时候必须有jre环境。并且neo4j是根据计算机中图论理论来实现的。 neo4j图数据库主要有以下组成元素&#xff1a;&#xff08;具体…

Kibana,Docker Remote Api,Kubernetes Api Server我未授权访问漏洞(附带修复方法)

一.Kibana Kibana是⼀个开源的分析与可视化平台&#xff0c;设计出来⽤于和Elasticsearch⼀起使⽤的。你可以⽤kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互⽅式是以各种不同的图表、表格、地图等直观地展示数据&#xff0c;从⽽达到⾼级的数据分…

【数据链路层】ARP协议

文章目录 以太网以太网帧对的格式 MAC地址对比MAC地址和IP地址 MTU和MSSARP协议ARP协议的工作原理ARP欺骗 以太网 ”以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输…

数学思维曼哈顿距离

前言&#xff1a;刚刚看到这个题的时候模拟了一下&#xff0c;感觉就是一个曼哈顿距离的问题&#xff0c;我们计算当前位置和中心的曼哈顿距离&#xff0c;然后比较x 或 y 到中心距离的大小&#xff0c;如果有一个小于等于&#xff0c;那么就是ok的 #define _CRT_SECURE_NO_WAR…

正点原子imx6ull-mini-Linux驱动之Linux IIO 驱动实验

工业场合里面也有大量的模拟量和数字量之间的转换&#xff0c;也就是我们常说的 ADC 和 DAC。 而且随着手机、物联网、工业物联网和可穿戴设备的爆发&#xff0c;传感器的需求只持续增强。比如手 机或者手环里面的加速度计、光传感器、陀螺仪、气压计、磁力计等&#xff0c;这些…

【数据结构】关于栈你必须知道的内部原理!!!

前言&#xff1a; &#x1f31f;&#x1f31f;Hello家人们&#xff0c;小编这期将带来关于栈的相关知识&#xff0c;以及代码的实现&#xff0c;希望能够帮到屏幕前的你。 &#x1f4da;️上期双链表博客在这里哟&#xff1a;http://t.csdnimg.cn/xgjK1&#xff1b; &#x1f4…

预测云计算的未来

云计算的未来是否依旧未知&#xff1f; 直到最近&#xff0c;云计算还是软件编程界之外很少有人熟悉的一个概念。如今&#xff0c;云计算已成为一切的基础&#xff0c;从点播电视服务和在线游戏门户网站到电子邮件和社交媒体&#xff0c;这四大现代世界的基石。云计算将继续存在…

Electron 使用Electron-build 进行打包

看完下面两篇就可以完成&#xff01; 基于vue3vite的web项目改为Electron桌面应用&#xff08;一&#xff09;_vue3转electron-CSDN博客 将web项目打包成electron桌面端教程&#xff08;二&#xff09;vue3vitets_vue3 打包桌面端-CSDN博客 打包报错 1. 首先确定依赖包 npm …

合金钢旋转花键:高强度与高耐磨性的选择

旋转花键‌是一种利用装在花键外筒内的滚珠&#xff0c;‌在精密研磨的滚动沟槽中作平滑滚动&#xff0c;‌同时传递力矩的直线运动系统。需要在振动冲击负荷作用过大、‌定位精度要求高的地方&#xff0c;‌以及需要高速运动性能的地方发挥重要作用。 旋转花键的性能跟材质有直…