【NumPy】深入理解NumPy的dot函数:矩阵乘法与点积运算详解

news2024/11/18 17:49:58

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式+人工智能领域,具备多年的嵌入式硬件产品研发管理经验。

📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导、简历面试辅导、技术架构设计优化、开发外包等服务,有需要可加文末联系方式联系。

💬 博主粉丝群介绍:① 群内高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

深入理解NumPy的dot函数:矩阵乘法与点积运算详解

  • 1. NumPy库介绍
  • 2. dot函数介绍
    • 2.1 函数定义
      • 参数说明
      • 返回值
  • 3. 示例代码
    • 3.1 一维数组点积
    • 3.2 二维数组(矩阵)乘法
    • 3.3 多维数组点积
    • 3.4 使用输出数组
    • 3.5 实际应用:图像处理中的点积计算
  • 4. 总结

在这里插入图片描述

1. NumPy库介绍

NumPy(Numerical Python)是Python编程语言的一个库,提供了对大型、多维数组和矩阵的支持,此外还提供了许多数学函数库用于对数组进行操作。NumPy是科学计算的基础工具之一,其高效处理和构建多维数组的能力使其在数据科学、机器学习和科学计算中被广泛使用。

NumPy数组对象(ndarray)比Python标准列表有几个优势:其大小固定、元素类型相同、内存布局紧凑且支持矢量化操作。这一系列特性使得NumPy成为有需要进行数值运算和处理真实世界大数据的高性能计算程序员的首选工具。

2. dot函数介绍

numpy.dot 函数用于计算两个数组的点积。根据输入数组的维度不同,可用于不同类型的计算:

  1. 一维数组:计算两个一维数组的内积(即点积)。
  2. 二维数组:进行矩阵乘法。
  3. 多维数组:按照传统的矩阵乘法规则计算其对应的相乘。

2.1 函数定义

numpy.dot(a, b, out=None)

参数说明

  • a:第一个输入数组。
  • b:第二个输入数组。
  • out:一个存储结果的输出数组,可选项。

返回值

返回两个输入数组的点积。如果提供了out参数,结果会存储在out参数中并返回。

接下来,我们将通过一系列示例展示numpy.dot的不同用法。

3. 示例代码

在接下来的部分中,我们将演示numpy.dot 在一维数组、二维数组和多维数组上的应用。

3.1 一维数组点积

假设我们有两个一维数组xy,我们可以通过numpy.dot 计算它们的点积。

import numpy as np

# 创建两个一维数组
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

# 计算点积
dot_product = np.dot(x, y)
print(dot_product)

输出如下:

32

计算过程为:(14 + 25 + 3*6 = 4 + 10 + 18 = 32)。

3.2 二维数组(矩阵)乘法

当我们处理二维数组时,numpy.dot 用于进行矩阵乘法运算。

import numpy as np

# 创建两个二维数组
A = np.array([[1, 2], 
              [3, 4]])
B = np.array([[5, 6], 
              [7, 8]])

# 计算矩阵乘法
product = np.dot(A, B)
print(product)

输出如下:

[[19 22]
 [43 50]]

计算过程为:

[[1*5 + 2*7, 1*6 + 2*8], 
 [3*5 + 4*7, 3*6 + 4*8]]

即:

[[19, 22], 
 [43, 50]]

3.3 多维数组点积

对于多维数组,numpy.dot 按照传统矩阵乘法规则进行相乘。

import numpy as np

# 创建两个三维数组
A = np.array([[[1, 2], 
               [3, 4]], 
              
              [[5, 6], 
               [7, 8]]])
B = np.array([[[1, 0], 
               [0, 1]], 
              
              [[1, 1], 
               [1, 1]]])

# 计算多维数组乘法
product = np.dot(A, B)
print(product)

输出如下:

[[[ 1  2]
  [ 3  4]
  [ 3  3]
  [ 7  7]]

 [[ 5  6]
  [ 7  8]
  [11 11]
  [15 15]]]

这里展示的是两个三维张量的点积计算,点积操作根据矩阵乘法规则在不同维度上执行。

3.4 使用输出数组

我们还可以通过提供out参数将结果存储在已存在的数组中。

import numpy as np

# 创建两个数组
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

# 创建存储结果的数组
out_array = np.zeros(1)

# 计算点积并存储结果
np.dot(x, y, out=out_array)
print(out_array)

输出如下:

[32.]

在这种情况下,计算结果32存储在out_array中。

3.5 实际应用:图像处理中的点积计算

在图像处理和计算机视觉中,点积计算常用于卷积操作、图像滤波等。例如,我们想要对一个2D灰度图像应用一个简单的3x3卷积核:

import numpy as np
from scipy.signal import convolve2d

# 创建一个灰度图像(6x6数组)
image = np.array([[1, 2, 3, 4, 5, 6],
                  [7, 8, 9, 10, 11, 12],
                  [13, 14, 15, 16, 17, 18],
                  [19, 20, 21, 22, 23, 24],
                  [25, 26, 27, 28, 29, 30],
                  [31, 32, 33, 34, 35, 36]])

# 定义一个3x3卷积核
kernel = np.array([[1, 0, -1],
                   [1, 0, -1],
                   [1, 0, -1]])

# 使用卷积计算
convolved_image = convolve2d(image, kernel, mode='valid')
print(convolved_image)

输出如下:

[[ -6  -6  -6  -6]
 [-18 -18 -18 -18]
 [-30 -30 -30 -30]
 [-42 -42 -42 -42]]

这个示例展示了如何通过卷积计算边缘检测。卷积运算实质上是一个滑动窗口的点积计算,它在卷积核覆盖的每个局部区域执行点积操作。

4. 总结

NumPy作为一个功能丰富的库,为科学计算和数据处理提供了极大的便利。本文重点介绍了NumPy中的dot函数,这是一个用于计算点积和矩阵乘法的重要函数。通过不同维度的数组示例,我们展示了numpy.dot计算一维数组的点积、二维数组的矩阵乘法和多维数组的点积。此外,我们还演示了如何指定输出数组以及在图像处理中的实际应用。

从这篇文章中,我们了解到:

  1. numpy.dot 是一个多用途的函数,可以根据输入数组的维度不同来处理点积和矩阵乘法。
  2. 无论是用于简单的向量计算、矩阵操作还是复杂的多维张量乘法,numpy.dot 均表现出色。
  3. 在实际应用中,通过点积计算,我们可以实现许多重要操作,如卷积、图像滤波等。

NumPy不仅仅局限于dot函数,它还提供了一系列强大而高效的数值计算工具。掌握这些工具可以大大提升我们在科学计算、数据分析等领域的工作效率和准确性。如果你对NumPy及其功能有更多的兴趣,建议进一步学习和探索更多的相关内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1716193.html

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

相关文章

MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

一、找不到my.ini配置文件 MySQL 8 安装或启动过程中,如果系统找不到my.ini文件,通常意味着 MySQL服务器没有找到其配置文件。在Windows系统上,MySQL 8 预期使用my.ini作为配置文件,而不是在某些情况下用到的my.cnf文件。 通过 …

报错注入常用的三种注入方式(flool ,extractvalue、updatexml)

报错注入常用的三种注入方式(flool ,extractvalue、updatexml) 在学习sql注入的过程中经常会遇到一些没有显示位的sql注入靶场,所以一般的注入的方式就无法再使用,在这种情况下我们可以使用函数报错注入的方式,通过报错查询和显示我们想要得到…

【教学类-59-】专注力视觉训练01(圆点百数图)

背景需求: 视觉训练的神奇效果,让你的宝贝成为焦点 - 小红书魔法视觉追踪-视觉训练—— 🔍视觉训练🔍 🔹想要提高宝宝的专注力,视觉训练是个绝佳方法! 🔹让宝宝仔细观察数字的路线&a…

PageHelper多数据源无法自动切换数据源问题解决

在使用PageHelper进行分页处理的过程中,通过配置autoRuntimeDialect: true发现,在执行MySQL分页处理后,继续执行SqlServer的分页,使用的仍然是MySQL的语法,PageHelper并没有进行自动切换数据源处理。 在查看源码的时候…

西湖大学提出AIGC检测框架,精准识别AI撰写的文稿

近年来人工智能技术突飞猛进,尤其是大语言模型的出现,让AI具备了创作文章、小说、剧本等内容的能力。 AI代写,已经逃不过老师、编辑、审稿人的火眼金睛了。但让AI仅改写部分片段,就安全了么? 针对检测AI改写的片段&a…

基于FMEA保证汽车电控系统的可靠性

随着汽车技术的飞速发展,电控系统已成为现代汽车的“大脑”,掌控着车辆的方方面面。然而,这一复杂的系统也面临着诸多潜在失效风险,如何确保汽车电控系统的可靠性,成为汽车制造业亟待解决的问题。幸运的是,…

设计模式 18 迭代器模式 Iterator Pattern

设计模式 18 迭代器模式 Iterator Pattern 1.定义 迭代器模式 (Iterator Pattern) 是一种行为型设计模式,它提供了一种访问集合元素的标准方法,而无需暴露集合的内部表示。 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该…

DiffBIR论文阅读笔记

这篇是董超老师通讯作者的一篇盲图像修复的论文,目前好像没看到发表在哪个会议期刊,应该是还在投,这个是arxiv版本,代码倒是开源了。本文所指的BIR并不是一个single模型对任何未知图像degradation都能处理,而是用同一个…

如何解压忘记了密码的加密zip压缩包?这两个方法收藏好!

加密是一种保护信息不被未经授权访问的重要手段。ZIP压缩包作为一种常见的文件压缩格式,zip文件加密是很多人都回去做的一件事情,那么zip加密文件如何解密?有几种方法可以解密呢?今天介绍几种方法给大家。 一、尝试常用密码 我们…

2.1色彩空间

色彩发送器 色彩认知 光源是出生点,光源发射出光线,光线通过直射反射折射等路径最终进入人眼。 但人眼接收到光线后,人眼的细胞产生了一系列化学反应。 由此把产生的信号传入大脑,最终大脑对颜色产生了认知感知。 光的要素 光…

如何让Google快速收录?

要让Google快速收录你的网站,可以考虑使用GSI服务,这是一种专门设计来加速网站被Google搜索引擎收录的服务,下面详细解释GSI服务的基本原理和具体好处: GSI服务通过一种名为GPC爬虫池的系统实现,这个系统是基于对Goog…

多条文本转二维码怎么做?一键批量建码的使用技巧

怎么快速的制作多条文本信息的二维码?随着二维码的广泛使用,现在很多内容都可以通过生成二维码扫码的方式来获取信息,其他文本二维码就是比较常用的一种类型。那么当需要将多条不同的文本内容每条单独生成二维码时,有什么方法可以…

python列表元素操作与函数应用详解

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、列表元素加一的实现方法 示例代码 二、列表生成式的简化操作 三、列表反转函数revers…

香橙派Orange AI Pro 初体验

什么是香橙派 ? 香橙派(Orange Pi)是深圳市迅龙软件有限公司旗下的开源产品品牌。它专注于为全球个人和企业提供高性价比的开源硬件、开源软件以及OEM/ODM服务。香橙派已经迭代了30多款产品,形成了涵盖开源硬件、开源软件、开源芯…

22net冒泡排序与插入排序

冒泡排序 观看视频 【python练习题】每日一练_第八天_冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1QT4y197pa/?spm_id_from333.337.search-card.all.click&vd_source498ae9e9c7a8a7d16da872c9d74cdc38PS:视频中用的了numpy库,大…

电瓶车进电梯识别报警摄像机

随着电动车的普及,越来越多的人选择电动车作为出行工具。在诸多场景中,电梯作为一种常见的交通工具,也受到了电动车用户的青睐。然而,电动车进入电梯时存在一些安全隐患,为了提高电动车进电梯的安全性,可以…

国内加密软件排行榜,每一款加密软件都是精品

在数字化快速发展的今天,数据安全和隐私保护已成为企业和个人关注的焦点。加密软件作为保护数据安全的重要手段,其重要性日益凸显。以下是根据权威机构的评测和用户反馈,整理的国内加密软件排行榜及其特点概述。 1、加密软件安企神免费试用7天…

centos8系统如何安装宝塔面板

我这边购买了一台Hostease的VPS云主机产品,想要安装宝塔面板,但是我这边是安装时遇到错误,如图: 这边尝试检查了似乎时yum 有问题, 无法通过yum 安装。因此联系了Hostease技术人员帮助,他们告知自2022年1月…

Java基于saas模式云MES制造执行系统源码Spring Boot + Hibernate Validation什么是MES系统?

Java基于saas模式云MES制造执行系统源码Spring Boot Hibernate Validation 什么是MES系统? MES制造执行系统,通过互联网技术实现从订单下达到产品完成的整个生产过程进行优化管理。能有效地对生产现场的流程进行智能控制,防错防呆防漏&…

【NumPy】全面解析add函数:高效数组加法操作

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…