Python中matmul、*、.dot、@与.multiply区别

在 Python 中,有多种用于矩阵和数组运算的操作符和函数。以下是其中一些常见的操作符和函数,以及它们之间的区别:

1. `*`:对应元素相乘(element-wise multiplication)

2. `@` 或 `.dot()` 或 `numpy.matmul()`:矩阵乘法(matrix multiplication)

3. `numpy.multiply()`:对应元素相乘,与 `*` 相似

 1. `*` - 对应元素相乘

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

result = A * B
print(result)

输出:


[[ 5 12]
 [21 32]]

 2. `@` 或 `.dot()` 或 `numpy.matmul()` - 矩阵乘法

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

result = A @ B
# 或者
result_dot = A.dot(B)
# 或者
result_matmul = np.matmul(A, B)

print(result)
print(result_dot)
print(result_matmul)

输出:

[[19 22]
 [43 50]]

3. `numpy.multiply()` - 对应元素相乘

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

result = np.multiply(A, B)
print(result)

输出:

[[ 5 12]
 [21 32]]

总结:

 `*` 和 `numpy.multiply()` 都执行对应元素的乘法。
`@`、`.dot()` 和 `numpy.matmul()` 都执行矩阵乘法,适用于二维数组或矩阵。

选择使用哪种操作符或函数取决于你的具体需求和数据类型。在进行矩阵乘法时,通常推荐使用 `@` 或 `.dot()` 或 `numpy.matmul()`,因为它们更直观,而且适用于多维数组。


 注意点:

当使用@时,若两侧矩阵/数组维度不同,则产生结果的维度也不相同:

x = [[1, 2], [3, 4], [5, 6]]
y = np.ones(2)
print(x@y)
print(x@y.reshape(2, 1))

输出:

[[1, 2], [3, 4], [5, 6]]
[1. 1.]
[ 3.  7. 11.]
[[ 3.]
 [ 7.]
 [11.]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值