python古怪的乘法_Python 乘法整理

本文详细介绍了NumPy库中np.multiply、np.matmul与np.dot等函数的功能及使用场景,包括矩阵与数组间的各种运算规则,如对应元素相乘、矩阵乘法、内积计算等,并通过实例说明了不同情况下这些函数的具体应用。

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

1. np.multiply

对 array 和 matrix 对象的操作相同

(1) a 和 b 维度相同

都是每行对应元素相乘(即对应内积的第一步,不求和)

>>> a = np.array([[1,2],[1,2]])

>>> a*a

>>> array([[1, 4],

[1, 4]])

(2)对于两个矩阵元素 a 和 b 维度不一的情况(array 和 matrix 对象都适用),则需将相应的行和列进行扩充,需要扩充的行或列的维度必须为 1。

对列扩充则补 1, 对行扩充则将第一行复制到每一行。比如,a:3 * 1, b: 1 * 2,则 a 扩充为 3 * 2,b 扩充为 3 * 2。

如下所示:

>>> a = np.array([[1],[1],[1]])

>>> b = np.array([1,2])

>>> np.multiply(a, b)

>>> array([[1, 2],

[1, 2],

[1, 2]])

(3)a 和 b为标量:则标量直接相乘

2. *

(1)对于 matrix 对象,代表矩阵乘法(维度必须满足相应规则);

(2)对于array对象,则是每行对应元素相乘。当 array 对象的 shape 不同时(matrix 对象不行) ,其规则和 np.multiply 一样;

3. np.matmul

该函数对 array 和 matrix 对象的操作是不一样的。

(1)对于 matrix 对象,对应矩阵乘法,对象维度必须满足矩阵乘法规则。

(2)对于 array 对象,对应内积,但对象维度必须相同,不支持维度扩展。

(3)不支持标量运算。

在array 中,与 multiply 一样,每行对应元素相乘

4. np.dot

对于matrix 对象,对应矩阵乘法。

对于两个 array 类型的元素:a,b,有如下可能:

(1)a 和 b 都是一维 array,那么 dot 就是它们的内积(点乘);

(2)a 和 b 都是二维 array,那么 dot 就是它们的矩阵乘积(即按矩阵乘法规则来计算),也可以用 matmul 或 a @ b;

(3)如果a 和 b 都是标量(scalar),那么 dot 就是两个数的乘积,也可以用 multiply 或 a * b;

(4)若 a:N * D,b:1 * D,那么 dot 为 a 的每一行和 b (只有一行)的 内积;

>>>a = a = np.array([[1,2], [3, 4]])

>>>b = np.array([1, 2])

>>>np.dot(a, b)

>>>array([ 5, 11])

(5)a:N * D,b:M * D (N >= M)a 的所有行和 b 的所有行的内积,共要计算 N * M 次,结果的 shape 为:N * M。

>>>a = a =np.array([[1, 2], [2, 3], [3, 4]])

>>>b = b =np.array([[1, 2], [2, 3]])

>>>np.dot(a, b)

>>>array([[ 5, 8],

[ 8, 13],

[11, 18]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值