Python学习-numpy高级数组和矩阵的内积函数inner和matmul

博客主要介绍了Numpy的数组内积函数inner以及矩阵内积函数matmul。先导入numpy,定义用于内积计算的矩阵(数组),接着分别给出矩阵内积matmul()和数组内积inner()的计算公式,还提供了Python学习中numpy高级点积函数的相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Numpy 的数组内积函数 inner 以及矩阵内积函数 matmul

首先还是导入numpy

#导入numpy 
import numpy as np

定义两个矩阵(数组)a和b,用于内积计算

#定义两个数组
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
print("a")
print(a)
print("b")
print(b)

输出结果:
a
[[1 2]
 [3 4]]
b
[[5 6]
 [7 8]]

 

1、矩阵内积 matmul()函数

假如有矩阵A和矩阵B他们都是两行两列,则内积计算结果也为两行两列的一个矩阵,假设C为内积矩阵,计算公式如下。

C[0,0]=A[0,0] *B[0,0] + A[0,1] *B[1,0]:A的第一行与B的第一列,对应元素的乘积之和;

C[0,1]=A[0,0] *B[0,1] + A[0,1] *B[1,1]:A的第一行与B的第二列,对应元素的乘积之和;

C[1,0]=A[1,0] *B[0,0] + A[1,1] *B[1,0]:A的第二行与B的第一列,对应元素的乘积之和;

C[1,1]=A[1,1] *B[0,1] + A[1,1] *B[1,1]:A的第二行与B的第二列,对应元素的乘积之和;

#矩阵内积 matmul函数,结果为矩阵
#a的每一行和b的每一列计算
c=np.matmul(a,b)
print("c")
print(c)

输出结果:
c
[[19 22]
 [43 50]]

2、数组内积 inner()函数

数组的内积是两个数组的行与行乘积和运算,同上有数组A和B,则计算公式如下

C[0,0]=A[0,0] *B[0,0] + A[0,1] *B[0,1];

C[0,1]=A[0,0] *B[1,0] + A[0,1] *B[1,1];

C[1,0]=A[1,0] *B[0,0] + A[1,1] *B[0,1];

C[1,1]=A[1,0] *B[1,0] + A[1,1] *B[1,1];

d=np.inner(a,b)
print("d")
print(d)

输出结果:
d
[[17 23]
 [39 53]]

Python学习-numpy高级之数组点积dot函数https://mp.youkuaiyun.com/postedit/92719324

Python学习-numpy高级之矩阵点积vdot函数https://mp.youkuaiyun.com/postedit/92703109

 

<think>我们被要使用中文回答,并且要遵循严格的格式要。用户的问题是关于numpy.dot函数如何计算矩阵内积,即其计算原理方法。根据提供的引用,我们可以总结如下: 引用[2]引用[3]都提到了numpy.dot函数-对于两个一维数组,计算的是向量的内积(即对应元素乘积之)。-对于两个二维数组,计算的是矩阵乘法(即矩阵乘积)。-对于多维数组,计算规则是:结果数组中的每个元素是数组a的最后一维与数组b的倒数第二维的乘积(即沿着这两个维度进行内积运算)。 因此,用户所问的“矩阵内积”实际上在numpy.dot中对于二维数组就是矩阵乘法。注意,在数学中,矩阵内积(Frobenius内积)通常定义为对应元素乘积之,但numpy.dot对于两个二维数组并不计算这个,而是计算矩阵乘法。如果用户想要计算Frobenius内积,可以使用np.sum(A *B)或者np.vdot(A, B)(注意vdot会将矩阵展平)。 但是,用户的问题明确指向numpy.dot函数,所以我们应该解释numpy.dot在矩阵(二维数组)上的行为。 计算原理:设A是m×n矩阵,B是n×p矩阵,则它们的矩阵乘积C是一个m×p矩阵,其中C的第i行第j列元素为:$$c_{ij}= \sum_{k=1}^{n}a_{ik}\timesb_{kj}$$ 这就是numpy.dot在二维数组上的计算方式。方法:使用numpy.dot(A,B)即可,或者使用运算符@(A @B),或者使用np.matmul(A, B)(在二维数组上效果相同)。注意:numpy.inner函数的行为与dot不同。引用[1]展示了inner的计算:对于两个矩阵AB,inner计算的是A的每一行B的每一行的内积(即对应元素相乘再)。所以inner得到的结果是一个矩阵,其第i行第j列是A的第i行B的第j行的内积。而dot则是标准的矩阵乘法。 因此,回答应明确区分dotinner矩阵上的不同。 步骤: 1.解释numpy.dot在二维数组矩阵)上的计算原理(矩阵乘法)。 2.给出一个简单的示例。 3.与numpy.inner进行对比,说明区别。 根据引用[2]的示例:```pythonimportnumpy asnpA =np.array([[1,2],[3,4]]) B= np.array([[1,0],[0,1]])print(np.dot(A, B))```输出:``` array([[1,2],[3,4]]) ```这个结果就是矩阵A乘以单位矩阵B(即单位矩阵),所以结果还是A。 而inner的例子(引用[1]):```pythonA= np.array([[1,2],[3,4]])B =np.array([[1,3],[2,3]]) print(np.inner(A,B))``` 输出: ```array([[7,8],[15,18]]) ```计算过程: 第一行:A的第一行[1,2]与B的第一行[1,3]内积:1*1+2*3=7;与B的第二行[2,3]内积:1*2+2*3=8。第二行:A的第二行[3,4]与B的第一行内积:3*1+4*3=15;与第二行内积:3*2+4*3=18。所以,inner计算的是行之间的内积。因此,在回答中要强调:numpy.dot对于矩阵矩阵乘法,而numpy.inner是行与行之间的内积。 最后,生成相关问题。</think>### NumPy.dot 矩阵内积计算原理及方法 在 NumPy 中,`numpy.dot()` 函数执行的是**矩阵乘法**而非严格数学意义上的矩阵内积(Frobenius 内积)。其计算原理遵循线性代数的矩阵乘法规则: #### 计算原理 1. **维度要**: 设矩阵 $A$ 维度为 $m \times n$,矩阵 $B$ 维度为 $n \times p$,则结果矩阵 $C$ 维度为 $m \times p$。 **必要条件**:$A$ 的列数必须等于 $B$ 的行数。 2. **元素计算规则**: 结果矩阵 $C$ 中每个元素 $c_{ij}$ 的计算公式为: $$ c_{ij} = \sum_{k=1}^{n} a_{ik} \times b_{kj} $$ 即 $C$ 的第 $i$ 行第 $j$ 列元素等于 $A$ 的第 $i$ 行与 $B$ 的第 $j$ 列的点积。 #### 计算方法 ```python import numpy as np # 示例矩阵 A = np.array([[1, 2], [3, 4]]) # 2x2 矩阵 B = np.array([[5, 6], [7, 8]]) # 2x2 矩阵 # 计算矩阵乘法 result = np.dot(A, B) ``` **输出**: ``` [[19 22] [43 50]] ``` **计算过程验证**: - $c_{11} = (1×5) + (2×7) = 5+14=19$ - $c_{12} = (1×6) + (2×8) = 6+16=22$ - $c_{21} = (3×5) + (4×7) = 15+28=43$ - $c_{22} = (3×6) + (4×8) = 18+32=50$ #### 与其他函数的区别 1. **`numpy.dot()` vs `numpy.inner()`**: - `dot()`:对二维数组执行矩阵乘法(满足 $A \cdot B$ 的线性代数规则)[^1][^2]。 - `inner()`:计算行向量之间的点积(对二维数组 $A$ $B$,结果为 $A$ 各行与 $B$ 各行的内积)[^1]。 ```python np.inner(A, B) # 输出: [[17 23] [39 53]] ``` 2. **`numpy.dot()` vs `numpy.multiply()`**: - `dot()`:矩阵乘法(涉及操作)。 - `multiply()`:逐元素乘法(*Hadamard 积*),无步骤[^2]。 #### 多维数组扩展 对于高维数组,`np.dot()` 的计算规则为: $$ \text{dot}(A, B)[i,j,k,m] = \sum_{r} A[i,j,r] \times B[k,r,m] $$ 即对 $A$ 的最后一维 $B$ 的倒数第二维进行[^3]。 --- ### 相关问题 1. `numpy.dot()` 与 `@` 运算符在矩阵乘法中有何区别? 2. 如何用 NumPy 计算矩阵的 Frobenius 内积(严格数学定义的内积)? 3. 当 `numpy.dot()` 用于一维数组时,其行为与矩阵乘法有何不同?[^2] [^1]:numpy.inner()函数,从字面上来看是矩阵内积,但是在运算方法上来看却不是... [^2]:numpy使用之numpy.dot, numpy.multiply... [^3]:Numpy线性代数-numpy.dot()...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值