Python的向量和矩阵乘法意义大全包括dot和*的区别(2020)

本文介绍了Python中向量和矩阵乘法的全面概念,重点探讨了dot函数和星号(*)操作符的区别,旨在帮助在算法、机器学习和线性代数中使用Python的读者理解不同乘法操作的适用场景。

Python的向量和矩阵乘法意义大全

最近在用python练习算法,牵涉到一些数学公式,但对python各个相乘符号的意义不是很了解,索性就都实现了一遍,罗列在下面啦,也可以自己复制过去一个一个验证啦🐾

#python 矩阵和向量相乘的意义
#Author:sw
#Time:2020/10/10

import numpy as np

#向量与向量相乘
a = np.array([1,2]) #为行向量(1,2) shapes(2,)
b = np.array([1,2,3])#为行向量(1,2,3) shapes(3,)
#print(a*b) #会报错
#print(a.dot(b))#显然也会报错

c = np.array([1,1,2])#为行向量(1,1,2) shapes(3,)
# print(b*c) #答案为[1,2,6] 为对应位置的数相乘(*)
# print(c
<think> 我们正在处理关于Python中逐元素乘法矩阵乘法向量乘法的介绍。根据引用资料,我们可以总结如下: 1. **逐元素乘法(Element-wise Multiplication)**: - 也称为Hadamard积。 - 对应元素相乘,要求两个矩阵(或数组)形状相同。 - 在NumPy中,可以使用`np.multiply()`函数或`*`运算符(对于`np.array`类型)实现。 2. **矩阵乘法(Matrix Multiplication)**: - 线性代数中的矩阵乘法,要求第一个矩阵的列数等于第二个矩阵的行数。 - 在NumPy中,可以使用`np.dot()`(对于二维数组)、`np.matmul()`或`@`运算符(Python 3.5+)实现。 3. **向量乘法(Vector Multiplication)**: - 向量乘法通常指点积(内积),结果是一个标量。 - 对于两个向量,点积计算方式为对应元素相乘后求。 - 在NumPy中,可以使用`np.dot()`或`@`运算符实现。 我们将按照以下结构组织回答: 1. 逐元素乘法 2. 矩阵乘法 3. 向量乘法(点积) 4. 不同数组类型的区别(如`np.array``np.matrix`) 5. 示例代码 注意:引用[2]提到,对于`np.array`,直接使用`*`是逐元素乘法;而对于`np.matrix`,`*`是矩阵乘法。因此,我们需要注意数组类型。 下面开始编写回答: </think> ### Python中逐个元素乘法矩阵乘法向量乘法详解 #### 1. **逐个元素乘法(Hadamard积)** - **定义**:两个同维数组对应位置的元素相乘 - **运算符**:`*`(对`np.array`有效) - **函数**:`np.multiply(a, b)` - **规则**: - 要求输入数组形状完全相同 - 结果维度与输入相同 - 数学表达:$ (A \odot B)_{ij} = A_{ij} \times B_{ij} $ - **示例**: ```python import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) print("逐元素乘法结果:\n", A * B) # 输出:[[ 5 12] # [21 32]] ``` #### 2. **矩阵乘法线性代数乘法** - **定义**:满足 $C_{ij} = \sum_k A_{ik} \times B_{kj} $ 的运算 - **运算符**:`@`(Python 3.5+) - **函数**:`np.dot(a, b)` 或 `np.matmul(a, b)` - **规则**: - 要求 $A$ 的列数 = $B$ 的行数 - 结果维度:$ (m \times n) \times (n \times p) \to (m \times p) $ - 数学表达:$ C = AB $ - **示例**: ```python X = np.array([[1, 2], [3, 4]]) # 2x2 Y = np.array([[5, 6], [7, 8]]) # 2x2 print("矩阵乘法结果:\n", X @ Y) # 输出:[[19 22] # [43 50]] # 计算过程:1*5 + 2*7 = 19, 1*6 + 2*8 = 22, ... ``` #### 3. **向量乘法(点积/内积)** - **定义**:一维向量的点积运算 - **运算符**:`@` 或 `np.dot()` - **规则**: - 要求两向量长度相同 - 结果:标量 $ \sum_{i=1}^n a_i b_i $ - 数学表达:$ \vec{a} \cdot \vec{b} = \|a\|\|b\|\cos\theta $ - **示例**: ```python v1 = np.array([3, 4]) # 向量 v2 = np.array([5, 6]) # 向量 print("点积结果:", v1 @ v2) # 输出:3*5 + 4*6 = 39 ``` #### 4. **关键区别总结** | 运算类型 | 运算符 | 函数 | 输入要求 | 输出维度 | |----------------|--------|----------------|-------------------|----------------| | 逐元素乘法 | `*` | `np.multiply` | 同维度数组 | 同输入维度 | | 矩阵乘法 | `@` | `np.dot/matmul`| $A$列数=$B$行数 | $m \times p$ | | 向量点积 | `@` | `np.dot` | 同长度向量 | 标量 | > **重要提示**:`np.matrix`类型与`np.array`行为不同: > - `np.matrix`中`*`执行矩阵乘法 > - 推荐始终使用`np.array`并通过运算符明确区分运算类型[^2][^3] #### 5. **综合应用示例** ```python import numpy as np # 创建数组 matrix = np.array([[1,2],[3,4]]) # 2x2 vector = np.array([5,6]) # 1x2 # 混合运算 result = matrix @ vector # 矩阵x向量 (2x2 @ 2x1 → 2x1) print("矩阵向量:\n", result) # 输出:[17, 39] # 广播机制下的逐元素乘法 scaled = matrix * np.array([0.5, 2]) # 每列乘以不同系数 print("广播乘法:\n", scaled) # 输出:[[0.5 4], [1.5 8]] ``` --- ### 相关问题 1. 如何用NumPy实现三维张量的批量矩阵乘法? 2. 在神经网络前向传播中,矩阵乘法逐元素乘法的应用场景有何不同? 3. 稀疏矩阵乘法Python中如何高效实现? 4. 为什么推荐使用`@`运算符替代`np.dot()`进行矩阵乘法? 5. 当进行$(A \times B) \odot C$这类混合运算时,如何避免显式循环? [^1]: Python中常见的矩阵乘法操作 [^2]: 编程速记(30)Python篇-矩阵乘法与除法&逐元素乘除 [^3]: Python中的元素相乘与矩阵相乘(附Demo) [^4]: 矩阵乘法python
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值