当前位置: 首页 > 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…...

08_微服务划分与团队人数之监控治理与跨团队协作

微服务划分与团队人数之监控治理与跨团队协作 体系内容 可观测性三支柱:指标、日志、链路追踪 治理要素:SLO、Dashboard、告警分级、容量视图、契约审计 Spring Cloud Alibaba 关联:Nacos、Sentinel、Gateway、RocketMQ、Dubbo 与观测平台协同 跨团队机制:接口契约、消息契…...

2026届毕业生推荐的AI学术工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于毕业论文写作进程里&#xff0c;人工智能工具可充作辅助方式用以提高效率。学生能借AI开展…...

网站主机技术概述

网站主机技术概述 随着互联网技术的飞速发展,网站已经成为企业和个人展示形象、提供服务的必要平台。网站主机的选择对于网站的稳定性和访问速度至关重要。本文将详细阐述网站主机技术,包括其基本概念、类型、选择标准以及未来发展趋势。 一、网站主机基本概念 网站主机,…...

Vivado团队协作效率翻倍:如何用企业级Vivado_init.tcl统一团队编译环境?

Vivado团队协作效率翻倍&#xff1a;如何用企业级Vivado_init.tcl统一团队编译环境&#xff1f; 在FPGA设计领域&#xff0c;团队协作的效率往往被环境配置差异所拖累。想象这样一个场景&#xff1a;当十位工程师使用不同的线程参数编译同一项目时&#xff0c;不仅性能表现参差…...

失业期PHP程序员玻璃心,伪勤奋,固守旧认知的庖丁解牛

“失业期 PHP 程序员的玻璃心、伪勤奋、固守旧认知”&#xff0c;这三者并非独立的性格缺陷&#xff0c;而是一套互为因果的“心理防御闭环”。 它们共同构成了一个**“认知牢笼”**&#xff1a;因为害怕面对真实的残酷&#xff08;玻璃心&#xff09;&#xff0c;所以用低价值…...

基于DDPG算法的发电公司竞价策略代码逐逐段解读说明

python代码&#xff1a;基于DDPG&#xff08;深度确定性梯度策略&#xff09;算法的售电公司竞价策略研究 关键词&#xff1a;DDPG 算法 深度强化学习 电力市场 发电商 竞价 说明文档&#xff1a;完美复现英文文档&#xff0c;可找我看文档 主要内容&#xff1a; 代码主要…...

Scratch 3.0二次开发实战:从零构建自定义插件

1. 为什么需要自定义Scratch插件&#xff1f; Scratch作为全球最受欢迎的少儿编程工具&#xff0c;其模块化积木设计让编程学习变得直观有趣。但你可能遇到过这种情况&#xff1a;想做一个天气预报项目&#xff0c;却发现内置积木无法获取实时天气数据&#xff1b;或者想开发一…...

seo 优化计划包括哪些内容

SEO优化计划&#xff1a;打造高效网站流量的全面指南 在当前数字化时代&#xff0c;一个成功的网站离不开高效的搜索引擎优化&#xff08;SEO&#xff09;策略。SEO优化计划是一项复杂而多层次的工作&#xff0c;其目的是提升网站在搜索引擎结果中的排名&#xff0c;从而吸引更…...

2026年降AI后文本可读性变差怎么办:质量修复和自查方法

2026年降AI后文本可读性变差怎么办&#xff1a;质量修复和自查方法 提交前三小时查了AI率&#xff0c;82%。 当时脑子嗡的一声。冷静下来开始查资料找方法&#xff0c;前后折腾了大半天&#xff0c;最后靠嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;救回来了&#x…...

3步精通UndertaleModTool:解锁GameMaker游戏修改全流程

3步精通UndertaleModTool&#xff1a;解锁GameMaker游戏修改全流程 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleModT…...