jnp.matmul和jnp.dot的区别?

jnp.matmuljnp.dot 都是用于矩阵乘法的函数,但它们在处理多维数组(即张量)时有不同的行为。以下是它们的区别和具体用法:

jnp.dot

  • 主要用于向量点积和矩阵乘法。
  • 对于一维数组,计算向量的点积。
  • 对于二维数组,计算标准的矩阵乘法。
  • 对于多维数组,按照最后一个维度与倒数第二个维度进行计算。
import jax.numpy as jnp

# 向量点积
a = jnp.array([1, 2, 3])
b = jnp.array([4, 5, 6])
result = jnp.dot(a, b)  # 输出: 32

# 矩阵乘法
A = jnp.array([[1, 2], [3, 4]])
B = jnp.array([[5, 6], [7, 8]])
result = jnp.dot(A, B)  # 输出: [[19, 22], [43, 50]]

jnp.matmul

  • 主要用于矩阵乘法。
  • 对于一维数组,将它们视为向量。
  • 对于二维数组,计算标准的矩阵乘法。
  • 对于多维数组,遵循更一般的广播规则进行矩阵乘法。
import jax.numpy as jnp

# 向量乘法
a = jnp.array([1, 2, 3])
b = jnp.array([4, 5, 6])
result = jnp.matmul(a, b)  # 输出: 32,与 jnp.dot 相同

# 矩阵乘法
A = jnp.array([[1, 2], [3, 4]])
B = jnp.array([[5, 6], [7, 8]])
result = jnp.matmul(A, B)  # 输出: [[19, 22], [43, 50]]

# 多维数组
A = jnp.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
B = jnp.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
result = jnp.matmul(A, B)
# 输出: [[[ 7, 10], [15, 22]],
#       [[67, 78], [99, 114]]]

主要区别

  1. 对一维数组的处理

    • jnp.dot 计算向量的点积。
    • jnp.matmul 计算向量的点积,与 jnp.dot 相同。
  2. 对二维数组的处理

    • 两者都计算标准的矩阵乘法。
  3. 对多维数组的处理

    • jnp.dot 按照最后一个维度与倒数第二个维度进行计算。
    • jnp.matmul 遵循更一般的广播规则,能够处理更复杂的矩阵乘法。

示例:多维数组的区别

import jax.numpy as jnp

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

# jnp.dot 的结果
result_dot = jnp.dot(A, B)
print("jnp.dot 结果:\n", result_dot)

# jnp.matmul 的结果
result_matmul = jnp.matmul(A, B)
print("jnp.matmul 结果:\n", result_matmul)

在这个示例中,jnp.dotjnp.matmul 对于多维数组会产生不同的结果,因为它们遵循不同的广播规则和维度处理方式。一般来说,当处理多维数组时,jnp.matmul 更适合用于矩阵乘法,因为它能够正确处理高维张量的矩阵乘法。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值