当前位置: 首页 > article >正文

numpy学习笔记7:np.dot(a, b) 详细解释

numpy学习笔记7:np.dot(a, b) 详细解释

np.dot(a, b) 函数详解

np.dot(a, b) 是 NumPy 中用于计算两个数组的点积矩阵乘法的核心函数。其行为根据输入数组的维度不同而变化,以下是详细说明:


1. 输入为两个一维数组(向量)

  • 作用:计算向量内积(对应元素相乘后求和)。

  • 公式:结果=∑i=1nai⋅bi结果=∑i=1n​ai​⋅bi​。

  • 示例

    import numpy as np
    a = np.array([1, 2, 3])
    b = np.array([4, 5, 6])
    result = np.dot(a, b)  # 1*4 + 2*5 + 3*6 = 32
    print(result)  # 输出: 32

2. 输入为一个二维数组(矩阵)和一个一维数组(向量)

  • 作用:矩阵与向量的乘法,结果为向量。

  • 条件:矩阵的列数必须等于向量的长度。

  • 示例

    matrix = np.array([[1, 2], [3, 4]])  # 形状 (2, 2)
    vector = np.array([5, 6])            # 形状 (2,)
    result = np.dot(matrix, vector)      # [1*5 + 2*6, 3*5 + 4*6] = [17, 39]
    print(result)  # 输出: [17 39]

3. 输入为两个二维数组(矩阵)

  • 作用:矩阵乘法。

  • 条件:第一个矩阵的列数必须等于第二个矩阵的行数。

  • 示例

    a = np.array([[1, 2], [3, 4]])  # 形状 (2, 2)
    b = np.array([[5, 6], [7, 8]])  # 形状 (2, 2)
    result = np.dot(a, b)  # [[1*5+2*7, 1*6+2*8], [3*5+4*7, 3*6+4*8]]
    print(result)  # 输出: [[19 22], [43 50]]

4. 输入为高维数组(三维及以上)

  • 作用:沿指定轴求和,遵循张量乘法规则。

  • 规则np.dot(a, b) 对 a 的最后一个轴和 b 的倒数第二个轴进行乘积求和。

  • 示例

    a = np.ones((2, 3, 4))  # 形状 (2, 3, 4)
    b = np.ones((2, 4, 5))  # 形状 (2, 4, 5)
    result = np.dot(a, b)   # 形状 (2, 3, 2, 5)
    • 结果形状推导:保留 a 的前两个轴 (2, 3) 和 b 的后两个轴 (2, 5),合并中间的维度 4


5. 输入包含标量

  • 作用:标量与数组的普通乘法。

  • 示例

    a = 5
    b = np.array([1, 2, 3])
    result = np.dot(a, b)  # 等同于 5 * b → [5, 10, 15]
    print(result)  # 输出: [5 10 15]

6. 与 @ 运算符和 np.matmul() 的区别

功能np.dot(a, b)a @ b 或 np.matmul(a, b)
一维数组内积(标量)外积(错误,需显式处理)
高维数组张量积(按最后两轴计算)广播矩阵乘法(按最后两轴计算)
标量乘法支持不支持(需显式乘法)

7. 常见错误与注意事项

  • 维度不匹配

    a = np.array([[1, 2], [3, 4]])  # 形状 (2, 2)
    b = np.array([1, 2, 3])         # 形状 (3,)
    np.dot(a, b)  # 报错:shapes (2,2) and (3,) not aligned
  • 性能优化:对大型数组,np.dot() 默认使用优化后的 BLAS 库(如 Intel MKL),效率极高。

  • 内存共享:结果数组是新的对象,不与输入数组共享内存。


总结

  • 一维数组 → 向量内积。

  • 二维数组 → 矩阵乘法。

  • 高维数组 → 张量积(沿特定轴计算)。

  • 标量 → 普通乘法。

  • 替代操作@ 运算符更适用于矩阵乘法,np.dot() 更通用。


http://www.kler.cn/a/591361.html

相关文章:

  • PHP前置知识-HTML学习
  • Matlab 高效编程:用矩阵运算替代循环
  • 华为IFS财经变革(51页PPT)(文末有下载方式)
  • harmonyOS开发,如何使用Record,将一种类型的属性映射到另一种类型
  • Qt——设计颜色编辑选取对话框
  • 基于FPGA的轨道交通CPCI光纤板(6U)板卡
  • Unity WebGL IIS报错无法使用
  • k8s-coredns-CrashLoopBackOff 工作不正常
  • 《星际通信协议中的密码战争:一场跨越光年的攻防博弈》
  • CentOS下安装ElasticSearch(日志分析)
  • 82.RadioButton的选中处理逻辑 C#例子 WPF例子
  • 漏洞知识点《.htaccess 解析漏洞深度解析》
  • SpringBoot之如何集成SpringDoc最详细文档
  • Caffeine 缓存:简介、优势及应用场景
  • iwebsec-updatexml报错注入
  • 区块链 智能合约安全 | 整型溢出漏洞
  • 【2025】基于ssm+uniapp的图书馆座位预约小程序系统(源码、万字文档、图文修改、调试答疑)
  • 前端开发概论
  • Github 2025-03-17开源项目周报Top12
  • Statistical Learning 统计学习 :回归任务,线性回归,最小二乘法,标准误差,R方