点乘与叉乘

article/2025/10/14 8:53:25

0. 几何含义

0.1 点乘

点乘,又称向量的内积,结果为一个数,计算公式如下:

 上述公式的推导过程如下:

 因此,通过点乘可以得出两个向量之间的夹角,向量垂直时,点乘结果为0.

0.2 叉乘

叉乘,又称向量的外积,运算结果为一个向量,该向量z与向量a,b组成的平面垂直,计算公式如下:

 向量叉乘得到是向量组成平面的法向量,法向量行列式的值可以解释为这两个向量a, b共起点时,所构成平行四边形的面积。

1. numpy实现

1.1 向量点乘

numpy中使用dot函数来完成向量之间的点乘(对应元素相乘再相加)

1.2 矩阵点乘

numpy中使用multiply函数来实现矩阵之间的点乘(对应位置元素相乘),也可使用 * 运算符实现相同的功能。此时两个矩阵的尺寸大小必须相等。

1.3 矩阵叉乘

numpy中使用matmul函数来实现矩阵之间的叉乘(对应位置元素相乘),也可使用 @ 运算符实现相同的功能。此时第一个矩阵的列数等于第二个矩阵的行数。

 总结:

对于向量,使用dot函数完成向量的点乘

对于矩阵,使用multiply函数和 * 运算符完成矩阵的点乘,使用matmul函数和@运算符完成矩阵的叉乘。

2. pytorch实现

2.1 矩阵点乘

pytorch中使用mul函数来完成二维矩阵之间的点乘,同时 * 运算符也可实现相同的功能。

>>> x
tensor([[-0.9263,  0.3411, -0.0781, -0.9598],[-1.1215,  0.9547, -0.2663,  0.6355],[-0.2772,  0.2032, -1.4178, -1.8679]])
>>> torch.ones([3, 4])
tensor([[1., 1., 1., 1.],[1., 1., 1., 1.],[1., 1., 1., 1.]])
>>> y = torch.ones([3, 4]) 
>>> x * y
tensor([[-0.9263,  0.3411, -0.0781, -0.9598],[-1.1215,  0.9547, -0.2663,  0.6355],[-0.2772,  0.2032, -1.4178, -1.8679]])
>>> torch.mul(x, y)
tensor([[-0.9263,  0.3411, -0.0781, -0.9598],[-1.1215,  0.9547, -0.2663,  0.6355],[-0.2772,  0.2032, -1.4178, -1.8679]])

2.2 矩阵叉乘

pytorch中使用mm函数来完成二维矩阵之间的叉乘,同时@运算符【具体对应的函数应该是matmul】也可完成矩阵的叉乘

pytorch中matmul函数是一个神奇的函数根据第一个和第二个输入tensor的维度得到的是不同的效果。具体介绍如下图所示:

  •  假设两个tensor都是一维向量,那么返回的结果是向量之间的点乘,即一个值
  • 假设两个tensor都是二维矩阵,那么返回的结果是矩阵的叉乘
  • 假设第一个tensor是一维向量,第二个tensor是二维矩阵,那么会给第一个tensor扩充一个维度,从而实现矩阵叉乘(一维向量的维度与二维矩阵的行数相等),得到结果之后将扩充的维度去除
  • 假设第一个tensor是二维矩阵,第二个tensor是一维向量,与上面类似,扩充维度之后进行矩阵叉乘,得到结果

上述不同情形的具体过程可以用下图表示:

此外,matmul函数实现了多维情况下矩阵的乘法,例如,输入的第一个tensor的维度为【k, m, p】,第二个tensor的维度为【k, p, n】,则最后的结果维度为【k,m,n】,即对于通道上的两个矩阵完成叉乘,然后组合在一起。

 3. matmul函数实现协方差batch计算

协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。计算公式如下:

 对于矩阵

 根据协方差矩阵的定义: 协方差矩阵的每个元素是各个向量元素之间的协方差.可以得到对应的协方差矩阵求法如下:

矩阵中的数据按行排列与按列排列求出的协方差矩阵是不同的,默认情况下按行排列。即每一行是一个observation(or sample),那么每一列就是一个随机变量。

 对应的协方差矩阵为:

 示例中,矩阵的维度为【m, n】表示m个样本,每个样本包含n个特征,最后得到的协方差矩阵维度为【n, n】。

numpy中提供函数cov来协方差矩阵,具体用法如下:

其中需要注意重要的参数rowvar的含义:

 使用cov函数来求协方差矩阵,默认情况下是按列排列,即每一行代表一个变量,而每一列代表一个sample(观测点)。即输入矩阵的维度【m,n】,输出的协方差矩阵维度【m,m】。

>>> import torch 
>>> x = torch.randn([3, 4]) 
>>> x
tensor([[-0.9263,  0.3411, -0.0781, -0.9598],[-1.1215,  0.9547, -0.2663,  0.6355],[-0.2772,  0.2032, -1.4178, -1.8679]])
>>> np.cov(x.numpy())
array([[ 0.41436621,  0.28581725,  0.2887559 ],[ 0.28581725,  0.87789806, -0.04488792],[ 0.2887559 , -0.04488792,  0.93183437]])

当输入维度扩充到三维时,在numpy中需要利用for循环来遍历,然后组合,这样的时间效率较差,因此可以通过torch中提供的matmul函数来实现三维下的协方差矩阵求法。

def cov_matrix(tensor, rowvar=True):# 输入为【batch, m个特征,n个样本】 输出【batch, m, m】tensor = tensor if rowvar else tensor.transpose(-1, -2)tensor = tensor - tensor.mean(dim=-1, keepdim=True)factor = 1/ (tensor.shape[-1] - 1)return factor * tensor @ tensor.transpose(-1, -2)

参考链接

向量和矩阵的点乘和叉乘_小白一直白-CSDN博客_矩阵的点乘和叉乘

pytorch 中涉及到矩阵之间的乘法(torch.mul, *, torch.mm, torch.matmul, @)_厚积而薄发-CSDN博客_pytorch 矩阵内积

增量计算海量数据协方差(pytorch)_daniaokuye的专栏-CSDN博客_pytorch 协方差

 Differentiable 1-D, 2-D covariance (numpy.cov) clone · Issue #19037 · pytorch/pytorch · GitHub


http://chatgpt.dhexx.cn/article/lLy4a532.shtml

相关文章

矢量叉乘能否反求矢量

这两天纠结一个问题,矢量叉乘能否反求矢量? a ⃗ b ⃗ c ⃗ \vec{a}\times\vec{b}\vec{c} a b c 如果已经知道矢量 a ⃗ \vec{a} a 和矢量 c ⃗ \vec{c} c ,能否求解得到矢量 b ⃗ \vec{b} b 呢? 想了很久,答案是不…

矢量叉乘,向量外积

矢量叉乘,向量外积 原创不易,路过的各位大佬请点个赞 矢量叉乘,向量外积 矢量叉乘,向量外积1. 矢量叉乘定义2. 模长3. 方向4. 坐标运算6. 叉乘矩阵(斜对称矩阵)6. 叉乘运算规则 1. 矢量叉乘定义 定义两个…

点乘叉乘

在游戏开发中,确定目标的方位,朝向,夹角等相关数据需要用到向量间的计算,其中最常用到的就是点乘和叉乘。 说实话,因为向量的运算在平时开发中不是经常使用,我也总弄混这两种运算的含义,所以这…

线段的叉乘

文章目录 叉乘的定义和几何含义叉乘的几个相关操作案例参考思路 叉乘的定义和几何含义 定义 :定义点 a ( x 1 , y 1 ) , b ( x 2 , y 2 ) a(x_1,y_1),b(x_2,y_2) a(x1​,y1​),b(x2​,y2​)的叉乘为 ∣ x 1 y 1 x 2 y 2 ∣ x 1 y 2 − x 2 y 1 \left |\begin{arr…

矢量叉乘计算

1.叉乘的几何意义 两个几何矢量A,B的叉乘(cross product) 也叫叉积(cross product),向量积(vector product)或矢量积。叉乘的结果是一个矢量 C。 叉乘用 “X” 表示,且不…

向量叉乘理解

今天刚开始做向量题,碰到下面这题 解析如下 哥们感觉解释的很笼统,也不是很能理解,在查阅了各种资料以及拿餐巾纸叠来叠去以后终于搞明白了,总结如下: 首先,题目的意思是: 直线L为两个平面的…

叉乘计算公式几何推导

叉乘计算公式几何推导 推导方法1 经过旋转变换之后,对象的面积是不会改变的。 把 △ F E G \triangle{FEG} △FEG旋转 θ \theta θ到 △ F ′ E G ′ \triangle{FEG} △F′EG′ △ F ′ E G ′ \triangle{FEG} △F′EG′的面积计算是简单的,即F’的纵坐…

向量叉乘

向量叉乘公式以及推导: 向量叉乘几何意义: 在三维几何中,向量a和向量b的叉乘结果是一个向量,该向量垂直于a和b向量构成的平面,该向量也被称作法向量 向量叉乘运用: 在三维模型中可以根据三角面的两条边计…

叉乘分配律的几何证明

叉乘分配律的几何证明 方法1 叉乘常被用于计算机图形学求平面法向量计算。 叉乘的物理意义可以理解成力矩。力是可以合成与分解的,所以叉乘当然支持分配律。 下面使用几何的方式证明: ( a ⃗ b ⃗ ) c ⃗ a ⃗ c ⃗ b ⃗ c ⃗ (\vec{a}\vec{b}) …

向量叉乘的方向

可以根据这个判断是顺时针还是逆时针的 ab的方向:四指由a开始,指向b,拇指的指向就是ab的方向,垂直于a和b所在的平面; ba的方向:四指由b开始,指向a,拇指的指向就是ba的方向&#xff…

叉乘在图形学中的几何意义 ---- 判断一个点是否在三角形内

1 叉乘是什么 先简单介绍一下叉乘(cross product): a → b → \overrightarrow{a} \times \overrightarrow{b} a b ,其结果,还是一个向量。 其方向,符合右手螺旋定则(右手手指头从a转向b,看大拇指指向哪…

叉乘的几何意义

如上图所示: AB x AC |AB||AC|sin(a) (a表示AB与AC的夹角),根据叉乘的右手准则,ABx AC的朝向为sot平面的坐标负值方向。 AE x AF |AE||AF|sin(b) (b表示AE与AF的夹角),根据叉乘的右手准则,AE …

叉乘

什么是叉乘 百度百科如下 向量积,数学中又称外积、叉积,物理中称矢积、叉乘,是一种在向量空间中向量的二元运算。与点积不同,它的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量和垂直。 我们可以使用它来…

安全运维体系建设思路

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,欢迎关注公众号:CTO Plus 关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个…

98%的运维人员会中招的运维安全陋习,你中了几个?

随着IT技术和业务的发展及各式各样安全漏洞的涌现,运维与安全这两个专业日渐交融,人们对运维安全的重视程度越来越高,于是逐渐出现了一个新的交叉领域叫“运维安全”。 黑客、白帽子忙于挖掘运维安全漏洞,企业忙于构建运维安全体…

阿里云——运维安全中心(堡垒机)

运维安全中心(堡垒机) 构建云上统一、高效、安全运维通道,保障云端运维、办公权限可管控、操作行为可审计 高效&安全运维 运维安全中心(堡垒机)用于集中管理资产权限,全程监控操作行为,实…

浪潮 服务器数据安全管理系统,浪潮SSC运维安全管控系统

浪潮SSC运维安全管控系统提供精细管控、运维无忧的数据中心安全解决方案。 统一账号 数据中心内所有各种服务器、数据库、网络设备、中间件、业务系统的账号作为从账号。浪潮SSC的账号作为主账号。进入数据中心的每个运维人员对应一个主账号,主账号用来做强身份认证…

安全运维管理

指标总览 指标详情 环境管理 指标内容如图: 指标理解: a)明确责任人或责任部门,相关制度文件中明确指定具体部门或人员负责机房安全,对进出机房管理,定期对机房设施维护管理。 b)有相关制度…