乘法/积运算和符号(点乘/内积/数量积,叉乘/向量积,矩阵乘法,Hadamard, Kronecker积,卷积)一网打尽

这篇博客详细梳理了乘法和积运算,包括点乘(内积/数量积)、叉乘(向量积)、矩阵乘法以及哈达马积和克罗内克积。特别指出,点乘和叉乘适用于一维矢量或二维矩阵,而矩阵乘法则更广泛地应用于n维向量。在计算机科学中,卷积运算与哈达马积相似,且哈达马积是克罗内克积的特殊情况。文章引用了相关参考资料,鼓励读者深入探讨和指正。

之前一直混淆于各种乘法和积运算中,不得其解,所以花了点功夫整理一下。

名称符号Latex运算应用意义
点乘/内积/数量积 ⋅ \cdot ∙ \bullet \cdot或\bullet a ⃗ ∙ b ⃗ = x 1 x 2 + y 1 y 2 \vec{a} \bullet \vec{b}=x_{1} x_{2}+y_{1} y_{2} a b =x1x2+y1y2三角形余弦角度一个向量在另一个向量方向上投影的长度
叉乘/向量积 × \times ×\times a × b = ( a 2 b 3 − a 3 b 2 , − a 1 b 3 + a 3 b 1 , a 1 b 2 − a 2 b 1 ) a \times b=(a_{2} b_{3}-a_{3} b_{2}, -a_{1} b_{3}+ a_{3} b_{1}, a_{1} b_{2}-a_{2} b_{1}) a×b=(a2b3a3b2,a1b3+a3b1,a1b2a2b1)向量方向是垂直于向量A,B组成的平面叉乘结果是一个向量,向量模长是向量A,B组成平行四边形的面积;
矩阵乘法NANNAN ( A B ) i j = ∑ k = 1 p a i k b k j = a i 1 b 1 j + a i 2 b 2 j + ⋯ + a i p b p j (A B)_{i j}=\sum_{k=1}^{p} a_{i k} b_{k j}=a_{i 1} b_{1 j}+a_{i 2} b_{2 j}+\cdots+a_{i p} b_{p j} (AB)ij=k=1paikbkj=ai1b1j+ai2b2j++aipbpj方程组各类需要求解方程组的问题
克罗内克积(Kronecker Product)/直积/张量积 ⊗ \otimes \otimes A ⊗ B = [ a 11 B ⋯ a 1 n B ⋮ ⋱ ⋮ a m 1 B ⋯ a m n B ] A \otimes B=\left[\begin{array}{ccc}a_{11} B & \cdots & a_{1 n} B \\\vdots & \ddots & \vdots \\a_{m 1} B & \cdots & a_{m n} B\end{array}\right] AB=a11Bam1Ba1nBamnB任意两个矩阵相乘矩阵分块相乘
哈达马积(Hadamard product) ∘ \circ ⊙ \odot \circ 或 \odot ( A ∘ B ) i j = ( A ⊙ B ) i j = ( A ) i j ( B ) i j (A \circ B)_{i j}=(A \odot B)_{i j}=(A)_{i j}(B)_{i j} (AB)ij=(AB)ij=(A)ij(B)ij对应位置相乘Kronecker Product两矩阵维度相同时的简化形式
卷积** ( f ∗ g ) ( t ) ≜ ∫ − ∞ ∞ f ( τ ) g ( t − τ ) d τ (f * g)(t) \triangleq \int_{-\infty}^{\infty} f(\tau) g(t-\tau) d \tau (fg)(t)f(τ)g(tτ)dτ深度学习中张量的卷积操作卷积核在特征层移动并对应位相乘表征函数 f 与经过翻转和平移的 g 的乘积函数所围成的曲边梯形的面积

补充几点:

  • 点乘,叉乘线性代数中强调的概念,所以主要针对一维矢量或者二维矩阵的运算,能够在二维或者三位空间进行可视化;而矩阵乘法、克罗内克积、哈达马积则是矩阵论中的概念,强调的是更为一般性的n维向量的运算规则,矩阵内积操作向量在内积空间中的矩阵乘法。
  • 矩阵乘法是使用最多的运算,比如在matlab和python的numpy中*。点乘可以视作矩阵乘法对两个一维矢量的运算规则。
  • 卷积的运算规则与哈达马积相同,而哈达马积又是克罗内克积一种特殊情况,所以在CS的一些论文中表达卷积操作, ⊗ \otimes ∘ \circ ⊙ \odot 、*似乎都没问题,但是最多还是星乘。

参考文献

点乘和叉乘
Hadamard_product refer from wiki
克罗内克积 refer from wiki
水平有限,有错误和不足支持还望大家及时提出讨论

### 矩阵乘法的区别 #### 定义与区别 矩阵的 **** 是指两个相同维度的矩阵对应位置上的元素相,得到的结果是一个同样维度的新矩阵。这种操作通常被称为逐元素乘法 (Element-wise Multiplication)[^2]。 而矩阵的 **乘法** 则是指按照线性代数规则进行的标准矩阵乘法。如果矩阵 \( A \) 的大小为 \( m \times n \)矩阵 \( B \) 的大小为 \( n \times p \),那么它们的 \( C = AB \) 将会是一个 \( m \times p \) 大小的矩阵。具体计算方式如下: \[ C[i][j] = \sum_{k=0}^{n-1}{A[i][k] * B[k][j]} \] 这是最常见的矩阵运算之一,在计算机图形学中常用于坐标变换等场景[^1]。 至于 ****,严格来说它是向量之间的运算而非矩阵间的运算。对于两个长度相同的向量 \( u \) \( v \),其定义为: \[ u \cdot v = |u|*|v|*\cos(\theta) \] 其中 \( \theta \) 表示两向量之间的夹角。然而有时人们也会提到矩阵行或列之间作为向量参与的情况,这实际上是对标准矩阵乘法规则的一种特殊解释[^3]。 #### 使用场景 - **** 主要应用于图像处理领域中的像素级操作或者机器学习框架里的某些特定层实现上,比如卷积神经网络(CNNs)的部分激活函数应用前后的调整过程可能涉及此方法。 - **矩阵乘法** 广泛存在于科学计算、工程建模以及游戏开发等领域内的各种复杂模拟当中。特别是在三维渲染管线里用来完成物体的空间位移、旋转平面投影等功能。 - **** 更多时候是用来衡量空间内任意两方向关系的一个数值指标;另外在推荐系统构建过程中也经常通过比较不同用户偏好特征间相似度来决定最终展示列表顺序等问题解决思路之中有所体现。 ```python import numpy as np # Example of element-wise multiplication (dot product between matrices) matrix_a = np.array([[1, 2], [3, 4]]) matrix_b = np.array([[5, 6], [7, 8]]) element_wise_product = matrix_a * matrix_b print("Element-Wise Product:\n", element_wise_product) # Standard matrix multiplication example standard_matrix_multiplication_result = np.dot(matrix_a, matrix_b.T) print("Standard Matrix Multiplication Result:\n", standard_matrix_multiplication_result) # Dot product example with vectors vector_u = np.array([1, 2]) vector_v = np.array([3, 4]) dot_product_of_vectors = np.dot(vector_u, vector_v) print("Dot Product Of Vectors:", dot_product_of_vectors) ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值