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

news2025/3/20 20:38:01

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.coloradmin.cn/o/2318572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity--GPT-SoVITS接入、处理GPTAPI的SSE响应流

GPT-SoVITS GPT-SoVITS- v2(v3也可以,两者对模型文件具有兼容) 点击后 会进入新的游览器网页 ----- 看了一圈,发现主要问题集中在模型的训练很需要CPU,也就是模型的制作上,问题很多,如果有现有…

Redis哈希槽机制的实现

Redis哈希槽机制的实现 Redis集群使用哈希槽(Hash Slot)来管理数据分布,整个集群被划分为固定的16384个哈希槽。当我们在集群中存储一个键时,Redis会先对键进行哈希运算,得到一个哈希值。然后,Redis将该哈…

docker pull 提示timeout

通过命令行拉取对应的mysql版本提示网络超时。 开始排查,首先确认是否能浏览器访问。ok的,可以正常访问。 终端curl 排查嗯 有问题 改了下 终端 vim ~/.zshrc 加入 export HTTP_PROXY"http://127.0.0.1:7890" export HTTPS_PROXY"…

(超详细) ETL工具之Kettle

Kettle简介 kettle最早是一个开源的ETL工具,后命名为Pentaho Data Integration。由JAVA开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道,可对接包括传统数据库、文件、大数据平台、接口、流…

random_masking 函数测试

文章目录 1. description2. excel3. pytorch code 1. description 功能:按一定比例的随机部分样本,简单来说就是按照一定的比例将行向量从小到大的顺序提取出来。思考1: 用了均匀分布,并且按照一定比例,取前prob概率来…

TDengine 中的流式计算

简介 TDengine 中的流计算,功能相当于简化版的 FLINK , 具有实时计算,计算结果可以输出到超级表中存储,同时也可用于窗口预计算,加快查询速度。 创建流式计算 CREATE STREAM [IF NOT EXISTS] stream_name [stream_o…

Java 大视界 -- Java 大数据在智慧交通自动驾驶仿真与测试数据处理中的应用(136)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

JVM的一些知识

JVM简介 JVM 是 Java Virtual Machine 的简称,意为 Java 虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。 JVM 和其他两个虚拟机的区别: VMw…

C语言每日一练——day_7

引言 针对初学者,每日练习几个题,快速上手C语言。第七天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中用…

Java使用FFmpegFrameGrabber进行视频拆帧,结合Thumbnails压缩图片保存到文件夹

引入依赖 <dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.17</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ja…

用hexo初始化博客执行hexo init时碰到的问题

用hexo初始化博客执行hexo init时碰到的问题 $ hexo init myblog INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: SSL certificate problem: unable to get local issuer cer…

4.1--入门知识扫盲,ISO知识体系介绍(看一遍,协议啥的全部记住)

OSI七层模型&#xff1a;网络世界的"七重天"生存指南&#xff08;附快递小哥版图解&#xff09; “如果你觉得网络分层很抽象&#xff0c;那就想象自己在寄快递” —— 来自一个被三次握手逼疯的程序员 开场白&#xff1a;网络通信就像送外卖 假设你要给隔壁妹子送奶…

AI训练如何获取海量数据,论平台的重要性

引言&#xff1a;数据——AI时代的“新石油” 在人工智能和大模型技术飞速发展的今天&#xff0c;数据已成为驱动技术进步的 “ 燃料 ”。无论是训练聊天机器人、优化推荐算法&#xff0c;还是开发自动驾驶系统&#xff0c;都需要海量、多样化的数据支持。 然而&#xff0c;获…

Git 使用SSH登陆

一、SSH介绍 SSH连接相比于HTTP连接会简单一点&#xff0c;因为SSH连接通过了私钥与公钥进行身份认证&#xff0c;这样就不需要像HTTP一样&#xff0c;每次clone或者操作仓库都需要输入密码 其中私钥和密钥是需要在自己电脑上生成的&#xff0c;通过命令即可生成一个私钥和一个…

织梦DedeCMS修改文章【标题、短标题、关键词】长度限制

在后台虽然可以设置标题的长度&#xff0c;但是数据库的字段固定是60个字符&#xff0c;短标题是36字符&#xff0c;关键词30字符&#xff0c;所以这里教大家修改一下织梦DedeCMS修改【标题】【短标题】【关键词】长度限制 一、后台配置 1、进入dede后台管理 -> 系统 ->…

Powershell WSL部署ubuntu22.04.5子系统

前提条件WSL 安装 wsl 安装参考1wsl 安装csdn参考2wsl 百度网盘离线下载 本地目录安装ubuntu22.04.5 子系统 powershell 管理员打开执行(实现,下载安装ubuntu子系统,用户创建,远程ssh登录设置,防火墙端口开放)子系统IP 查看方法wsl

umi自带的tailwindcss修改为手动安装

1》为什么改为手动&#xff1f; 主要是为了解决这个报错问题&#xff0c;虽然重新运行也可解决&#xff0c;但是总是要运行2-3次&#xff0c;比较麻烦 2》如何手动 1&#xff0c;先在devDependencies下安装这两个包 pnpm install postcss8.5.1 -D "autoprefixer"…

麒麟V10 arm cpu aarch64 下编译 RocketMQ-Client-CPP 2.2.0

国产自主可控服务器需要访问RocketMQ消息队列&#xff0c;最新的CSDK是2020年发布的 rocketmq-client-cpp-2.2.0 这个版本支持TLS模式。 用默认的版本安装遇到一些问题&#xff0c;记录一下。 下载Releases apache/rocketmq-client-cpp GitHubhttps://github.com/apache/roc…

使用码云搭建CocoaPods远程私有库

一、创建远程私有索引库 用来存放私有框架的详细描述信息.podspec文件 1. 创建私有库 假设码云上创建的私有库为repo-spec 2. 查看本地已存在的索引库 pod repo list 3. 将远程私有索引库添加到本地 pod repo add [https://gitee.com/jingluoguo/repo-spec.git](https://gi…

专访LayaAir引擎最有价值专家-施杨

在 LayaAir 引擎的资源商店中&#xff0c;许多开发者都会注意到一个熟悉的名字——“射手座”。他不仅贡献了大量高质量的 Shader 资源&#xff0c;让一些开发者通过他的作品了解到 LayaAir 引擎在 3D 视觉效果上的更多可能&#xff0c;也让大家能够以低成本直接学习并应用这些…