news 2026/9/3 20:16:03

Python NumPy包完全使用指南:从入门到精通

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python NumPy包完全使用指南:从入门到精通

将其视为科学计算的关键基石, NumPy借助其核心的多维数组对象, 成功化解了传统列表存在的性能瓶颈, 它运用连续内存来存储同类型数据, 并且经由C语言底层予以实现从而加速运算, 相比纯循环效率提高了数十倍乃至上百倍。

NumPy数组高效存储结构示意图

要知道, NumPy 除了具备基础的数组操作之外, 还内置了线性代数、傅里叶变换、随机数生成等数十类科学计算工具, 这些科学计算工具能覆盖从数据清洗到建模训练的全流程需求。

快速上手安装指南

安装命令(推荐使用最新稳定版):

pip numpy

若有需要去指定版本, 比如说为了兼容旧项目这种情况, 那么能够使用pip, 使用pip的时候, numpy要等于2.3.2。

验证安装:打开 终端,输入以下代码检查版本:

对numpy进行引用, 将其简称为(np.), 其输出应当是2.3.2或者比2.3.2数值更高, 且应当带有相应标点。

数组创建与属性

在NumPy里头, 数组()乃是存储以及处理多维数据的核心结构所在。去掌握数组的创建方式以及关键属性, 这是开展高效数值计算的首要步骤。接下来, 我们依据基础创建→特殊数组→属性详解这样的逻辑来予以展开, 联合代码示例以及可视化图示, 助力你迅速构建起对数组的直观理解。

1. 列表/元组转换

借助np.array()这个函数, 能够把列表或者嵌套列表, 直接转变为数组, 好比这样:

拿出numpy并命名为np, # 形成一个1D数组(一维的), 它按照np.array(的方式构成。

1, 2, 3, 4, 5

)打印("一维数组:", ) # 输出: 数组(。这里表述有些混乱, 不太明确你完整准确的需求, 仅按照要求进行了一定改写。

1, 2, 3, 4, 5

你的内容似乎不太完整且存在一些混淆, 不太能准确理解其确切意图并达到合理改写要求。请补充完整清晰准确的内容后再让我进行改写。

,#,#

存在一个3D数组, 亦为三维的、嵌套列表方式呈现的列表, 它通过np.array()来构建, 之后打印输出这个3D数组的形状, 即这样一项内容会被显示出来, 也就是(2, 2, 2), 这意味着它是由2个2×2的矩阵所构成的。

2. 内置序列函数

要是面对那种存在规律的序列, 运用np.()这类函数, 相较于手动去写列表, 功效会更高。与之类似的range, 不过返回的是数组, 而并非迭代器, 它还支持步长, 以及浮点类型:

# 产生从零到五的整数数组(默认步长为一) , 等于np.(6)进行打印 # 输出: 数组(。

0, 1, 2, 3, 4, 5

生成, 十到十九的, 浮点数组, 等于, numpy的, 从十到二十点零的范围, 打印, 输出, 数组。

10., 11., 12., ..., 19.

# 确定步长(自2起始, 步长为3, 不大于14) = np.(2, 14, 3)打印() # 输出: 数组(, 、? 啥呀, 感觉原内容逻辑很奇怪, 这样改也挺变扭😕 但按要求改写了。

2, 5, 8, 11

3. 特殊数组:快速生成特定结构

NumPy提供了多个函数, 这些函数能生成具有特殊结构的数组, 以此满足初始化、占位等需求, 不过这并非手动定义的方式, 而是靠函数来实现的。

留意: np.empty()仅仅是分配内存却不进行初始化值的操作, 所以其速度比zeros以及ones要快, 然而需要保证后续能够覆盖掉所有的元素, 从而防止使用随机的初始值。

4. 属性详解:理解数组的“身份证”

在对数组展开操作以前, 借助属性去知晓它的结构这件事是极其关键的。有多个属性被提供出来用以描绘数组的形状, 还有的属性用于描述数组的类型, 另外还有属性用于说明数组的存储方式 , 其核心属性如下:

1)基础属性速览

把arr赋值为np.array() , 这是一个3×3的2D数组, 打印“形状(shape):”以及arr的形状, 其形状是(3, 3)也就是3行3列, 打印“维度(ndim):”以及arr的维度, 其维度是2也就是二维数组, 打印“元素总数(size):”以及arr的元素总数, 其元素总数是9也就是3×3 = 9个元素, 打印“数据类型(dtype):”以及arr的数据类型, 其数据类型是int64(默认整数类型), 打印“每个元素字节数():”以及arr每个元素的字节数, 是8也就是int64占8字节, 打印“总字节数():”以及arr的总字节数, 是72也就是9×8 = 72字节(=size×)。

2)关键属性:shape与axis

对于上述呈现为3×3形式的数组, 按照axis等于0的方式进行求和操作,其得出的结果是每一列各自的总和, 是这样的情况:

执行印刷操作处理矩阵数组按列方向求和的结果, 输出为这样的形式, 即第一列元素之和为1加4加7等于12, 第二列元素之和为2加5加8等于15, 第三列元素之和为3加6加9等于18。

索引与切片

NumPy数组的索引, 是高效数据提取的核心, NumPy数组的切片, 是高效数据操作的核心, 掌握这些技巧, 能让你轻松驾驭多维数据, 我们将从基础操作开始, 逐步过渡到高级用法, 帮你构建完整的索引逻辑体系。

基础索引:精准定位单个元素

遵循0基编号规则(和列表一样)的NumPy数组的索引, 多维数组借助整数元组来实现定位。比如说创建一个2D数组:

numpy as nparr = np.array()

若想要去访问处于第 0 行且是第 1 列的那个元素, 仅仅只需要动用索引元组 (0, 1) 就可以了:

print(arr) # 输出:2

存在如下情况, 这里的 arr 相等同于 arr, 然而其中前者属于 NumPy 所推荐的多维数组索引方式, 它具备更加简洁高效的特性。

切片:提取子数组的艺术

通过 start:end:step 这种语法来实现切片, 能够快速提取连续子数组, 比如针对 4×4 数组开展行列选择:

arr等于numpy的那种具有特定维度的东西, 其维度是4行4列, 也就是说arr是这样一种数组, 它的行索引范围在1到2这个区间内(不包含3哟), 列索引范围是从0到1这个区间(不包含2哒), 然后进行特定的输出动作。

重点特征, 切片所返回的内容是原数组的视图, 而并非副本, 这表明对其中子数组进行修改, 会直接对原数组产生影响。

为99 , 修改子数组元素 , 打印数组 , 原数组对应位置也变为99 , 输出结果为99。

要是需要防止对原本的数组造成影响, 能够借助.copy()来明确地创建一个副本, 即: 等于arr.copy()。

高级索引:灵活定位与筛选

当基础索引, 以及切片, 没办法满足复杂需求之时, 高级索引给予了更具灵活性的解决方案, 其主要涵盖整数数组索引, 还有布尔索引。

整数数组索引:按位置批量选择

依托整数数组来明确行列索引, 能够一次性提拿出并非连续的元素, 比如去挑选 arr 里处于 (0,1) 以及 (2,3)位置的那些元素:

我不太理解你提供的内容中不准确的表述呢,比如“np.(16).(4, 4)”这种, 你可以再准确清晰地说明一下具体需求, 以便我能按照要求准确改写。

此处的, 为行索引清单, 该清单是列索引清单, 这两者依照顺序互相搭配从而构成坐标。

布尔索引:按条件筛选元素

凭借与原数组处于同样形状状况的布尔数组这种方式, 甄选符合条件的元素, 该行为常常被应用于数据清洗以及条件提取方面。举例说明像这样, 从数组里挑选出全部大于5的那些元素:

把 arr 中大于 5 的元素生成新的集合, 这个集合里的元素是布尔值, 将其设置为 mask, 从原数组 arr 里提取 mask 集合中值为 True 的位置所对应的元素来组成新数组, 输出它。

6 7 8 9 10 11 12 13 14 15

布尔索引的关键逻辑是条件映现, 每一个元素借由条件判明来决断是否被挑选, 返回的乃一维数组也就是扁平化的结果。

依靠基础索引定位, 借助切片提取子数组, 凭借高级索引以灵活筛选, 将会应对 NumPy 数组那超多数的数据访问场景。牢记视图与副本的区别, 这能够帮助避免数据修改之际所出现的意外 bug。

数学函数与统计运算

以 NumPy 而言, 其有着数学函数以及统计运算模块, 此模块属于数据处理所用的核心工具, 它能够高效地去完成数组数值方面的计算, 并且还能够揭示出数据分布呈现的特征。它具备向量化运算特性以及丰富的统计函数库, 依靠这些, 把数值分析从繁杂琐碎的循环当中解放了出来, 进而成为数据科学工作流里特别关键的环节。

一、向量化数学函数:告别循环的高效计算

NumPy 给出了全方位的数学函数支撑, 包含三角函数、平方根、指数这类, 全部函数都支持元素级向量化运算, 不用编写循环, 直接针对整个数组开展操作, 极大程度提升计算效率。

1. 基础数学函数示例

2. 向量化运算的优势

相对于原生循环而言, NumPy向量化运算借助底层C语言进行优化, 实现提升计算速读数十个倍数。像是例如计算一百万个元素的平方根这个情况:

二、统计函数:从数据中提取关键特征

核心工具是用于理解数据分布的统计函数, 基础统计量如均值、总和、最大及最小值等由NumPy供给, 其支持按指定轴来进行计算, 以此满足多维数组分析的需求。

1. 生成示例数据

借着np..randn()来炮制出标准正态分布、也就是均值为0且方差为1那般状态的样本数组, 以此作为统计分析时的输入物。比如说呢, 去打造出有着3行以及4列规格的随机数组:

随机生成了一个有着三个元素的维度, 以及四个元素的维度的数组, 其形状呈现为 (3, 4) , 就如同# array( 这般 , 为arr = np..randn(3, 4)所生成。

0.52, -1.23, 1.89, -0.45

,#

-0.11, 2.03, -0.78, 1.12

,#

1.56, -0.34, 0.91, -1.02

留意: 新增的代码, 提议运用 np..().() 用来替换 np..randn() 呢。

2. 常用统计函数及按轴计算

以 arr 为例,常用统计函数及按轴计算结果如下:

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 20:15:37

从宝可梦女主角演进看角色数据建模与前端可视化实战

不同版本的宝可梦游戏中,女主角的设定各有特色。本文不讨论“谁更可爱”这种主观题,而是从游戏开发视角出发,把历代宝可梦女主角作为一个“角色设计演进样本”,拆解其中涉及的角色美术风格变化、数据建模、技能交互、前端展示等关…

作者头像 李华
网站建设 2026/9/3 20:14:26

H3海螺3多模态模型本地部署测评:16G显存量化方案

本地免费 H3(海螺3)多模态模型,深度测评:16G 显存能跑吗?最近不少群友在讨论 MiniMax 开源的 H3(海螺3)多模态模型,也有人直接叫它“海螺3”。很多人关心的问题是:这个模…

作者头像 李华
网站建设 2026/9/3 20:13:09

宝可梦同人开局设计:从龙系天王到晴天队的创作工程拆解

很多训练家朋友第一次看到这个标题,第一反应是:这不就是典型的爽文开局吗?龙系天王老爸、三首恶龙、闪光黑喷、系统绑定,要素齐全。但如果只把它当作“图一乐”的爽文,就错过了这个题材背后真正值得分析的东西——它实…

作者头像 李华
网站建设 2026/9/3 20:08:08

树莓派+LinuxCNC硬件框架搭建:直连驱动器与信号链路详解

各位玩雕刻机、DIY 数控、或者想把手里的树莓派真正用起来的朋友,大家好。 之前有不少人问我:树莓派能不能跑 LinuxCNC?答案是可以,而且社区里已经有很成熟的玩法。但真正让新手头疼的,往往不是软件安装,而…

作者头像 李华
网站建设 2026/9/3 20:04:08

zibll主题6.9.2授权机制深度适配指南

简介:这是一份面向WordPress开发者与主题定制学习者的zibll子比主题6.9.2免授权修复版资源,专为研究学习与本地环境调试设计,适用于熟悉PHP、前端开发及WordPress主题机制的中高级用户。资源包共1305个文件,涵盖728个核心PHP逻辑文…

作者头像 李华
网站建设 2026/9/3 20:00:02

现在性价比高的AI写作辅助网站有哪些品牌?聊聊真实使用体验

每到期末、毕业答辩、课题申报阶段,很多学生都会陷入论文写作的困境:选题毫无头绪、大纲逻辑混乱、正文撰写耗时长、参考文献格式错误、查重重复率高、AIGC检测告警、本校排版标准复杂。纯人工从零开始撰写、反复修改格式和降重,往往耗费数周…

作者头像 李华