Numpy 中的矩阵向量乘法

本文详细解析了在NumPy中进行矩阵乘法与元素乘法的区别及操作方法。针对np.array与np.matrix对象,阐述了使用np.multiply、np.dot、np.matmul以及对象方法dot实现不同类型的乘法运算。

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

结论:

元素乘法:np.multiply(a,b)
矩阵乘法:np.dot(a,b)np.matmul(a,b)a.dot(b)
唯独注意:*,在 np.array 中重载为元素乘法,在 np.matrix 中重载为矩阵乘法!

对于 np.array 对象

>>> a
array([[1, 2],
       [3, 4]])
元素乘法 用 a*bnp.multiply(a,b)
>>> a*a
array([[ 1,  4],
       [ 9, 16]])

>>> np.multiply(a,a)
array([[ 1,  4],
       [ 9, 16]])
矩阵乘法 用 np.dot(a,b)np.matmul(a,b)a.dot(b)
>>> np.dot(a,a)
array([[ 7, 10],
       [15, 22]])

>>> np.matmul(a,a)
array([[ 7, 10],
       [15, 22]])

>>> a.dot(a)
array([[ 7, 10],
       [15, 22]])

对于 np.matrix 对象

>>> A
matrix([[1, 2],
        [3, 4]])
元素乘法 用 np.multiply(a,b)
>>> np.multiply(A,A)
matrix([[ 1,  4],
        [ 9, 16]])
矩阵乘法 用 a*bnp.dot(a,b)np.matmul(a,b)a.dot(b)
>>> A*A
matrix([[ 7, 10],
        [15, 22]])
>>> np.dot(A,A)
matrix([[ 7, 10],
        [15, 22]])
>>> np.matmul(A,A)
matrix([[ 7, 10],
        [15, 22]])
>>> A.dot(A)
matrix([[ 7, 10],
        [15, 22]])

### 利用 NumPy 广播机制实现矩阵乘法 NumPy 提供了一种强大的广播机制,允许不同形状的数组之间执行算术操作。尽管标准的矩阵乘法通常通过 `np.dot` 或者 `@` 运算符完成,但在某些情况下可以借助广播机制模拟部分矩阵运算。 #### 使用广播机制实现矩阵向量相乘 当一个二维数组(矩阵)和一维数组(向量)进行乘法时,可以通过调整它们的维度使两者能够匹配,并应用广播规则[^1]。例如: ```python import numpy as np A = np.array([[1, 2, 3], [4, 5, 6]]) v = np.array([7, 8, 9]) # 将 v 转换为列向量以便于广播 v_column = v[:, None] C_broadcasted = A * v_column.T print(C_broadcasted) ``` 上述代码中,`v[:, None]` 将一维数组转换成列向量形式,从而使得它能与矩阵 `A` 正确地配合广播计算。 #### 数组间的逐元素乘法及其广播特性 对于两个相同大小的一维数组或者更高维度的情况,可以直接使用 `*` 符号来进行逐元素乘法。如果两者的尺寸不完全一致,则会尝试依据广播规则扩展较小的那个数组以适应较大的那个[^2]。比如下面的例子展示了简单的一维数组间如何自动填充对应位置上的数值完成乘积: ```python a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) result = a * b print(result) # Output: array([ 4, 10, 18 ]) ``` 这里不需要额外的操作因为双方长度一样所以直接按位相乘即可得到最终的结果。 #### 处理更复杂的多维情况下的广播行为 考虑另一个例子,在这个场景下我们有如下定义的一个矩形区域内的点坐标列表以及缩放因子表: ```python points = np.arange(6).reshape((2, 3)) factors = np.array([10, 20]).reshape((-1, 1)) scaled_points = points * factors print(scaled_points) ``` 在这个实例里,“factors”的结构被设计用来适配“points”,即使原始数据集具有不同的轴数也能顺利完成整个过程而无需显式的循环迭代处理每一个单独的数据项[^3]。 综上所述,虽然严格意义上的线性代数中的矩阵乘法规则并不总是适合采用广播方式表达出来;但是通过对输入参数适当变形之后确实可以在一定程度范围内利用到这种技术简化特定类型的数学变换逻辑描述。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值