将其视为科学计算的关键基石, 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 为例,常用统计函数及按轴计算结果如下: