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

深入了解 NumPy:深度学习中的数学运算利器

文章目录

      • 1. 导入NumPy
      • 2. 创建NumPy数组
      • 3. 数组的算术运算
      • 4. N维数组
        • 4.1 创建和操作多维数组
        • 4.2 高维数组
      • 5. NumPy的广播功能
        • 5.1 基本广播示例
        • 5.2 更复杂的广播示例
      • 6. 访问数组元素
        • 6.1 基于索引的访问
        • 6.2 遍历数组
        • 6.3 基于条件的访问
        • 6.4 高级索引
        • 6.5 性能考虑

在深度学习和数据科学的领域,数学运算尤为重要,而NumPy库则是Python中处理这些计算的核心工具。NumPy(Numerical Python的缩写)提供了一个强大的数组对象:numpy.ndarray,它是多维数组的核心,并带有大量的便捷方法,使得数学运算变得简洁而高效。

1. 导入NumPy

NumPy并不是Python标准库的一部分,需要单独安装和导入。在Python中,通过简单的导入声明可以轻松访问NumPy库:

import numpy as np

通过np这个别名来使用NumPy的各种功能,提高代码的可读性和易用性。

2. 创建NumPy数组

NumPy的核心功能之一是其数组处理能力。通过np.array()函数,可以将Python的列表转换成numpy.ndarray对象(即NumPy数组):

x = np.array([1.0, 2.0, 3.0])
print(x)
# 输出: [1. 2. 3.]

3. 数组的算术运算

NumPy数组支持元素级的算术运算,这意味着运算会应用到数组中的每一个元素上。

x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])

在NumPy中,进行基本运算如加法、减法、乘法和除法时,这些操作是按元素进行的:

print(x + y)  # 对应元素相加:[3. 6. 9.]
print(x - y)  # 对应元素相减:[-1. -2. -3.]
print(x * y)  # 对应元素相乘:[2. 8. 18.]
print(x / y)  # 对应元素相除:[0.5 0.5 0.5]

重要的是,进行这些操作的两个数组必须具有相同的形状或兼容的形状。如果形状不匹配,NumPy会尝试广播数组以匹配形状,如果无法广播,则会抛出一个错误(广播在后面有解释)

此外,NumPy也支持数组与标量之间的运算,这表现在所谓的广播(broadcast)特性上,允许小规模数据结构与大规模数据结构间进行算术运算:

print(x / 2.0)  # 每个元素除以2:[0.5 1.0 1.5]

4. N维数组

NumPy提供了强大的多维数组支持,这使其在科学计算中发挥了至关重要的作用。它能够处理从一维数组(向量)、二维数组(矩阵)到更高维度的数组(张量),用于表示各种复杂的数据结构。

4.1 创建和操作多维数组

以二维数组为例,可以轻松地创建和进行算术运算:

import numpy as np# 创建一个2x2的二维数组
A = np.array([[1, 2], [3, 4]])
print(A)
# 输出:
# [[1 2]
#  [3 4]]# 查看数组的形状和数据类型
print("Shape:", A.shape)  # Shape: (2, 2)
print("Data type:", A.dtype)  # Data type: int64# 创建另一个2x2的二维数组
B = np.array([[3, 0], [0, 6]])# 数组的加法和元素级乘法
print("A + B =", A + B)
# 输出:
# A + B = [[ 4  2]
#          [ 3 10]]
print("A * B =", A * B)
# 输出:
# A * B = [[ 3  0]
#          [ 0 24]]

在NumPy中,数组的算术运算是元素级的,意味着操作会在两个数组的相应元素间进行。此外,NumPy的广播功能允许执行如标量与数组之间的运算,这在实际应用中非常有用:

# 标量与数组的乘法
print("A * 10 =", A * 10)
# 输出:
# A * 10 = [[10 20]
#           [30 40]]
4.2 高维数组

NumPy的能力不限于一维或二维数组。它可以创建和操作任何高度的多维数组。例如,三维或更高维度的数组通常用于数据科学和机器学习中,处理如图像数据(宽度、高度、颜色通道)或时间序列数据(数据点、时间步长、特征数量):

# 创建一个3维数组
Z = 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]]])print(Z)
# 可以访问特定的层、行、列
print("Access a specific element:", Z[1, 2, 0])  # 访问第二层,第三行,第一个元素(16)

5. NumPy的广播功能

NumPy的广播功能是其数组操作中一个非常强大的特性,允许在执行算术运算时自动扩展一个较小的数组以匹配一个较大数组的形状,无需显式复制数据。

5.1 基本广播示例

当使用标量与数组进行运算时,标量会被广播到数组的每个元素上:

import numpy as npA = np.array([[1, 2], [3, 4]])
# 标量与二维数组的乘法
result = A * 10
print(result)
# 输出:
# [[10 20]
#  [30 40]]

在这里插入图片描述

在这个例子中,标量10被广播成与数组A相同的形状,然后与数组中的每个元素相乘。

5.2 更复杂的广播示例

广播功能也适用于维度不一致但兼容的数组之间。例如,当一维数组与二维数组相乘时,一维数组会沿着缺少的维度被扩展,以匹配较大的数组:

B = np.array([10, 20])
# 一维数组与二维数组的元素级乘法
result = A * B
print(result)
# 输出:
# [[10 40]
#  [30 80]]

在这里插入图片描述

一维数组B的每个元素被广播到了A的对应行上,使得乘法能够按元素执行。

6. 访问数组元素

NumPy数组提供了多种灵活的元素访问方法,这包括基于索引的访问以及基于条件的访问,极大地简化了数据操作和处理。

6.1 基于索引的访问

在NumPy数组中,每个元素的位置由从零开始的索引确定。可以通过指定位置的索引来访问单个数组元素,或者通过切片来访问数组的一个区段:

import numpy as npX = np.array([[51, 55], [14, 19], [0, 4]])
print("第0行:", X[0])  # 访问第一行
# 输出: [51 55]
print("位置(0,1)的元素:", X[0][1])  # 访问第一行的第二个元素
# 输出: 55
6.2 遍历数组

NumPy数组也支持使用循环来遍历元素,例如使用for循环遍历每一行:

for row in X:print(row)
# 输出:
# [51 55]
# [14 19]
# [0 4]
6.3 基于条件的访问

NumPy支持使用条件表达式来选择数组中满足特定条件的元素。这种方法返回一个布尔数组,可以用于索引原数组:

# 找出所有大于15的元素
filtered = X[X > 15]
print("大于15的元素:", filtered)
# 输出: [51 55 19]
6.4 高级索引

NumPy允许使用数组索引来访问数据,这对于从数组中选择一个非连续的元素子集特别有用:

X_flat = X.flatten()  # 将X转换为一维数组
print("转换后的一维数组:", X_flat)
# 输出: [51 55 14 19 0 4]indices = np.array([0, 2, 4])
selected_elements = X_flat[indices]  # 通过索引数组访问元素
print("选定索引的元素:", selected_elements)
# 输出: [51 14 0]
6.5 性能考虑

尽管Python是一种动态类型的语言,其运算速度通常不如C和C++这样的静态类型语言,但是NumPy的大部分数值计算都是用C或C++实现的。这意味着NumPy能够提供接近于编译型语言的性能,同时保持Python语言的灵活性和易用性。因此,使用NumPy可以在不牺牲性能的前提下,利用Python便捷的语法进行高效的数学和逻辑运算。

相关文章:

深入了解 NumPy:深度学习中的数学运算利器

文章目录 1. 导入NumPy2. 创建NumPy数组3. 数组的算术运算4. N维数组4.1 创建和操作多维数组4.2 高维数组 5. NumPy的广播功能5.1 基本广播示例5.2 更复杂的广播示例 6. 访问数组元素6.1 基于索引的访问6.2 遍历数组6.3 基于条件的访问6.4 高级索引6.5 性能考虑 在深度学习和数…...

鸿蒙开发接口Ability框架:【@ohos.ability.particleAbility (particleAbility模块)】

particleAbility模块 particleAbility模块提供了Service类型Ability的能力,包括启动、停止指定的particleAbility,获取dataAbilityHelper,连接、断开当前Ability与指定ServiceAbility等。 说明: 本模块首批接口从API version 7开…...

Flutter笔记:Widgets Easier组件库(8)使用图片

Flutter笔记 Widgets Easier组件库(8):使用图片 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…...

商务分析方法与工具(五):Python的趣味快捷-文件和文件夹操作自动化

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…...

codeforce#938 (div3) 题解

C. Inhabitant of the Deep Sea 数组第一个元素减一下&#xff0c;最后一个元素减一下&#xff0c;一共能减k次&#xff0c;问有多少元素能减到0.细节模拟我是傻逼&#xff0c;有问题建议直接看tc面像tc编程 #include <iostream> #include <string.h> #include &…...

【Docker】如何注册Hub账号并上传镜像到Hub仓库

一、创建Hub账户 浏览器访问&#xff1a;hub.docker.com 点击【Sign up】注册账号 输入【邮箱】【用户名】【密码】 ps&#xff1a;用户名要有字母数字&#xff1b;订阅不用勾选 点击【Sign up】注册即可 点击【Sign in】登录账号 输入【邮箱】【密码】 点击【Continue】登录 二…...

[初阶数据结构】单链表

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录于初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…...

项目使用git开发流程

第一步 项目初期&#xff1a;领导负责的工作 01 创建仓库&#xff1a;在码云上面创建仓库地址&#xff0c;创建完成后点击初始化README&#xff1a;郝陶涛/vue-tea 02 领导在桌面上将代码克隆下来&#xff1a;将代码克隆下来之后&#xff0c;切换到代码内部&#xff0c;使用g…...

Day 28 MySQL的数据备份与恢复

数据备份及恢复 1.概述 ​ 所有备份数据都应放在非数据库本地&#xff0c;而且建议有多份副本 备份&#xff1a; 能够防止由于机械故障以及人为误操作带来的数据丢失&#xff0c;例如将数据库文件保存在了其它地方 冗余&#xff1a; 数据有多份冗余&#xff0c;但不等备份&…...

PackageKit的使用(三)疑问篇

本篇主要是一些疑问归纳&#xff0c;不做具体的函数分析&#xff0c;但是会给出关键点&#xff0c;查看源码就会很清楚了 apt source PackageKit 1. org.freedesktop.PackageKit D-Bus 接口介绍 D-Bus API Reference: PackageKit Reference Manual c库的接口可以看源码。 2.…...

【Linux】17. 进程间通信 --- 管道

1. 什么是进程间通信(进程间通信的目的) 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了…...

有哪些有效的复习方法可以帮助备考软考?

软考目前仍然是一个以记忆为主、理解为辅的考试。学过软考的朋友可能会感到困惑&#xff0c;因为软考的知识在日常工作中有许多应用场景&#xff0c;需要理解的地方也很多。但为什么我说它是理解为辅呢&#xff1f;因为这些知识点只要记住了&#xff0c;都不难理解&#xff0c;…...

【MySQL | 第九篇】重新认识MySQL锁

文章目录 9.重新认识MySQL锁9.1MySQL锁概述9.2锁分类9.2.1锁的粒度9.2.2锁的区间9.2.3锁的性能9.2.4锁的级别 9.3拓展&#xff1a;意向锁9.3.1意向锁概述9.3.2意向锁分类9.3.3意向锁作用&#xff08;1&#xff09;意向锁的兼容互斥性&#xff08;2&#xff09;例子1&#xff08…...

含义:理财风险等级R1、R2、R3、R4、R5

理财风险等级R1、R2、R3代表什么&#xff0c;为什么R1不保本&#xff0c;R2可能亏损 不尔聊投资https://author.baidu.com/home?frombjh_article&app_id1704141696580953 我们购买理财产品的时候&#xff0c;首先都会看到相关产品的风险等级。风险等级约定俗成有5级&…...

ICode国际青少年编程竞赛- Python-2级训练场-列表入门

ICode国际青少年编程竞赛- Python-2级训练场-列表入门 1、 Dev.step(3)2、 Flyer.step(1) Dev.step(-2)3、 Flyer.step(1) Spaceship.step(7)4、 Flyer.step(5) Dev.turnRight() Dev.step(5) Dev.turnLeft() Dev.step(3) Dev.turnLeft() Dev.step(7) Dev.turnLeft() Dev.…...

【设计模式】14、strategy 策略模式

文章目录 十四、strategy 策略模式14.1 map_app14.1.1 map_app_test.go14.1.2 map_app.go14.1.3 navigate_strategy.go 十四、strategy 策略模式 https://refactoringguru.cn/design-patterns/strategy 需求: client 知道很多不同的策略, 希望在运行时切换. 场景示例: 就像高…...

C++类和对象(基础篇)

前言&#xff1a; 其实任何东西&#xff0c;只要你想学&#xff0c;没人能挡得住你&#xff0c;而且其实学的也很快。那么本篇开始学习类和对象&#xff08;C的&#xff0c;由于作者有Java基础&#xff0c;可能有些东西过得很快&#xff09;。 struct在C中的含义&#xff1a; …...

Oracle导入数据中文乱码问题处理,修改客户端字符编码跟数据库的一致

前提&#xff1a;SQL文件打开其中中文字符是正常显示&#xff0c;保证导出文件中文字符正常。通过sqlplus命令导入SQL文件出现乱码&#xff0c;这是因为客户端跟数据库的字符集不一致导致出现乱码问题。 要SQL导入的中文正常&#xff0c;要确保执行导入命令的客户端字符编码跟…...

【与 Apollo 共创生态:展望自动驾驶全新未来】

1、引言 历经七年的不懈追求与创新&#xff0c;Apollo开放平台已陆续推出了13个版本&#xff0c;汇聚了来自全球170多个国家与地区的16万名开发者及220多家合作伙伴。随着Apollo开放平台的不断创新与发展&#xff0c;Apollo在2024年4月19日迎来了Apollo开放平台的七周年大会&a…...

【webrtc】MessageHandler 5: 基于线程的消息处理:以PeerConnection信令线程为例

peerconn的信令是通过post 消息到自己的信令线程消息来处理的PeerConnectionMessageHandler 是具体的处理器G:\CDN\rtcCli\m98\src\pc\peer_connection_message_handler.hMachinery for handling messages posted to oneself PeerConnectionMessageHandler 明确服务于 signalin…...

计算机网络 3.2网络体系结构

第二节 网络体系结构 一、网络协议 1.定义&#xff1a; ①通信双方共同遵守的规则。 ②为网络数据交换制定的规则、约定与标准。 ③网络实体之间通信时有关信息传输顺序、信息格式、信息内容的约定或规则。 2.协议三要素&#xff1a; 语法&#xff1a;确定协议元素的格式…...

连接HiveMQ代理器实现MQTT协议传输

先下载MQTTX: MQTTX: Your All-in-one MQTT Client Toolbox 使用线上免费的MQTTX BROKER:The Free Global Public MQTT Broker | Try Now | EMQ 打开MQTTX&#xff0c;创建连接&#xff0c;点击NEW SUBSCRIPTION,创建一个主题&#xff0c;这里使用test/topic,在下面Json中填写…...

springcloud报错:Failed to start bean‘webServerStartStop‘

如果你正在使用nacos进行服务注册&#xff0c;然后报一下错误&#xff1a; 那就说明的nacos没有打开&#xff0c;所以找到你的下载nacos的文件夹 好了&#xff0c;错误完美解决~...

el-checkbox 无法动态设置勾选状态

问题 cheked 值动态变化&#xff0c;但是勾选状态无法动态改变 解决 v-model 与:checked 同时使用 <el-checkbox class"add-shop-check" v-model"renderData[0].isCheck" :checked"renderData[0].isCheck" change"checked > selec…...

车规级低功耗汽车用晶振SG-9101CGA

车规级晶振SG-9101CGA属于爱普生9101系列&#xff0c;是一款可编程晶振。SG-9101CGA车规级晶振采用2.5x2.0mm封装&#xff0c;利用PLL技术生产&#xff0c;此款振荡器的频率范围从0.67M~170MHZ任一频点可选&#xff0c;步进1ppm&#xff0c;采用标准CMOS输出&#xff0c;最大输…...

企业是保留传统的MES还是换新的MES?

在选择上MES系统的时候&#xff0c;企业可以根据自身所处行业不同、当前阶段不同&#xff0c;以及业务需求的差异&#xff0c;对症下药&#xff0c;选择适合自己的解决方案。对于有些企业本来就有MES系统&#xff0c;但是已经过时过旧&#xff0c;就要考虑换新的MES系统了. 保留…...

2024年第六届世界软件工程研讨会(WSSE 2024)即将召开!

2024年第六届世界软件工程研讨会&#xff08;WSSE 2024&#xff09;将于2024年9月13-15日在日本京都举行。软件工程领域的发展离不开各位专家学者和业界精英的共同努力和贡献。WSSE 2024将就软件工程领域的最新研究成果、实践经验和发展趋势进行深入交流和探讨&#xff0c;汇聚…...

Linux网络编程:TCP编程实现

目录 1、前言 2、函数介绍 2.1 socket函数 与 通信域 2.2 bind函数 与 通信结构体 2.2.1 domain通信地址族 与 通信结构体 2.2.2 IPv4地址族结构体 2.2.3 通用地址族结构体 2.2.4 示例&#xff1a;为套接字fd绑定通信结构体addr 2.3 listen函数 与 accept函数 …...

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本&#xff1a;7.3/7.2&#xff08;测试时我用的7.2要安装sg扩展 &#xff09; 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…...

C语言总结三:数组(压缩版)

一&#xff0c;数组概念 定义&#xff1a;相同类型元素的集合 二&#xff0c;一维数组 1&#xff0c;语法&#xff1a;type arr_name[常量值]; 2&#xff0c;初始化&#xff1a;int arr[5]{1,2,3,4,5}; 3&#xff0c;类型&#xff1a;int [5] 4&#xff0c;使用&#xff1…...

seo优化网站建设哪家好/seo整站优化方案案例

####引用> 这是一个引用 >这也是个引用吗&#xff1f; 注意符号和文本中间的空格 引用 这是一个引用 这也是个引用吗&#xff1f; 注意符号和文本中间的空格 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/whatislinux/p/92ae93635f91cc3befd1422a051ef57c.html...

给网站写教案做课件一节课多少钱/网络推广平台有哪些

再多读一篇文章会怎样&#xff1f; 也许跟没读一样。 看起来好像自己提高了&#xff0c;但差不多只是个表面现象。 你阅读了如此多的文章&#xff0c;但换来的也许只是一点点的进步。 要想掌握一种技术&#xff0c;你只有一条路——去做。 我想学会视频编辑&#xff0c;至少是要…...

常州网站建设公司方案/网站推广方式

使用 .NET4 中的Task优化线程池【.NET4 多核并行】 阅读本篇前&#xff0c;读者需对.NET4 System.Threading.Tasks 以及 Task Schedulers 有一定的了解。如果不是很了解&#xff0c;请查阅以下相关信息&#xff1a; Task: http://msdn.microsoft.com/en-us/library/system.thre…...

天水嘉通建设集团网站/如何在手机上开自己的网站

目录一、简介二、常见类型转换1、转换为字符串2、转换为指定类型数组3、转换为日期对象4、转换为集合5、指定泛型6、转换为指定类型三、时间日期1、当前时间2、字符串转Date3、Date转字符串4、获取Date对象的某个部分5、开始和结束时间6、日期时间偏移7、日期时间对象-DateTime…...

wordpress 文章编辑 插件/互联网推广广告

Akka 和 Storm 的设计差异 Akka 和 Storm 都是实现低延时, 高吞吐量计算的重要工具. 不过它们并非完全的竞品,如果说 Akka 是 linux 内核的话, storm 更像是类似 Ubuntu 的发行版.然而 Storm并非 Akka 的发行版, 或许说 Akka 比作 BSD, Storm 比作 Ubuntu 更合适. 实现的功能差…...

网站图片命名规范/如何建立公司网站网页

一、Md5()加密算法 单项加密&#xff0c;无法解密。 md5(string $str[, bool $raw_output false]); //计算md5散列值 对于可选参数raw_output。如果设置为true&#xff0c;那么MD5报文摘要将以16字节长度的原始二进制格式返回。false返回32位字符十六进制数字形式返回散列…...