
将其视为科学计算的关键基石, 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, 113. 特殊数组快速生成特定结构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 为例常用统计函数及按轴计算结果如下