快速掌握Python NumPy基础:数组操作与应用

需积分: 23 16 下载量 61 浏览量 更新于2024-07-05 1 收藏 2.52MB PDF 举报
"十分钟学会numpy.pdf" 在Python编程中,NumPy是一个不可或缺的库,尤其对于数据处理和科学计算。NumPy的核心是其多维数组对象,也被称为`ndarray`,它提供了高效的存储和操作大型数据集的能力。本文将深入探讨NumPy的基础知识,包括其重要性、安装方法以及数组的操作。 NumPy的重要性在于它的性能优化和丰富的数学功能。由于Python的标准列表在处理大量数据时效率较低,NumPy的`ndarray`成为数据科学家和工程师首选的数据结构。`ndarray`不仅支持基本的算术运算,还提供了许多高级数学函数,如统计分析、线性代数、傅里叶变换等,使得复杂的数值计算变得简洁高效。 安装NumPy非常简便,只需要在命令行中输入`pip install numpy`即可。这样就能够在Python环境中使用NumPy的所有功能。 `ndarray`是NumPy的基础,它允许用户创建一维、二维乃至多维数组。与Python列表不同,`ndarray`的所有元素必须是相同类型的(如整数、浮点数或复数)。在上述代码中,我们创建了一个名为`my_array`的一维`ndarray`,包含了整数1到4。NumPy数组可以通过索引来访问和修改元素,同时支持切片、索引和广播等高级操作。 NumPy数组的其他重要特性包括: 1. **广播**:当两个数组形状不匹配但可以广播到一个共同的形状时,NumPy能够自动扩展较小的数组以适应较大的数组。这对于在不同大小的数组间执行运算非常方便。 2. **索引和切片**:类似于Python列表,NumPy数组可以用索引来访问单个元素,用切片来获取子数组。此外,NumPy支持布尔索引,允许根据数组元素的值来选取子集。 3. **数组操作**:NumPy提供了丰富的函数,如`sum()`, `mean()`, `std()`等,用于计算数组的总和、平均值和标准差等统计量。还有`reshape()`, `transpose()`, `flatten()`等用于改变数组的形状。 4. **线性代数**:NumPy的`linalg`模块包含矩阵运算,如矩阵乘法、求逆、特征值和特征向量等,这对于机器学习和数据分析至关重要。 5. **随机数生成**:NumPy的`random`模块能生成各种分布的随机数,如均匀分布、正态分布等,这对于模拟和建模非常有用。 6. **数组函数**:NumPy的ufunc(通用函数)可以对数组的每个元素应用数学运算,比如`np.sin()`, `np.exp()`等,这些函数对整个数组进行操作,极大地提高了代码的效率。 7. **内存优化**:NumPy数组在内存中是连续存储的,这意味着访问和操作数组元素的速度非常快,特别适合大数据处理。 通过掌握NumPy的基本概念和操作,开发者可以高效地处理大量数据,执行复杂的数学计算,并无缝集成到Python的科学计算生态中。在实际工作中,NumPy常常与Pandas、Matplotlib等库结合使用,形成强大的数据分析和可视化工具链。对于想要深入理解和应用NumPy的Python开发者来说,理解数组、广播、索引和函数应用是必不可少的步骤。
2020-05-21 上传
说明:本文档所有内容来源于网络 https://www.numpy.org.cn/user/ 目录 1. NUMPY 介绍 1 1.1 什么是 NUMPY? 1 1.2 为什么 NUMPY 这么快? 3 1.3 还有谁在使用 NUMPY? 3 2. 快速入门教程 4 2.1 先决条件 4 2.2 基础知识 4 2.2.1一个例子 5 2.2.2 数组创建 6 2.2.3 打印数组 8 2.2.4 基本操作 10 2.2.5 通函数 13 2.2.6 索引、切片和迭代 14 2.3 形状操纵 18 2.3.1改变数组的形状 18 2.3.2 将不同数组堆叠在一起 20 2.3.3 将一个数组拆分成几个较小的数组 22 2.4 拷贝和视图 23 2.4.1 完全不复制 23 2.4.2 视图或浅拷贝 24 2.4.3 深拷贝 25 2.4.4 功能和方法概述 26 2.5 LESS 基础 26 广播(Broadcasting)规则 27 2.6 花式索引和索引技巧 27 2.6.1使用索引数组进行索引 27 2.6.2使用布尔数组进行索引 31 2.6.3 ix_()函数 34 2.6.4使用字符串建立索引 37 2.7线性代数 37 简单数组操作 37 2.8技巧和提示 38 2.8.1“自动”整形 39 2.8.2矢量堆叠 39 2.8.3直方图 40 2.9进一步阅读 41 3. NUMPY 基础知识 42 3.1 数据类型 42 3.1.1 数组类型之间的转换 42 3.1.2 数组标量 45 3.1.3 溢出错误 46 3.1.4 扩展精度 47 3.2 创建数组 47 3.2.1 简介 48 3.2.2 将Python array_like对象转换为Numpy数组 48 3.2.3 Numpy原生数组的创建 48 3.2.4 从磁盘读取数组 50 3.3 NUMPY与输入输出 51 3.3.1 定义输入 51 3.3.2 将行拆分为列 52 3.3.3 跳过直线并选择列 54 3.3.4 选择数据的类型 55 3.3.5 设置名称 56 3.3.6 调整转换 59 3.3.7 快捷方式函数 62 3.4 索引 62 3.4.1 赋值与引用 63 3.4.2 单个元素索引 63 3.4.3 其他索引选项 64 3.4.4 索引数组 65 3.4.5 索引多维数组 66 3.4.6 布尔或“掩码”索引数组 67 3.4.7 将索引数组与切片组合 69 3.4.8 结构索引工具 70 3.4.9 为索引数组赋值 71 3.4.10 在程序中处理可变数量的索引 72 3.5 广播 73 3.6 字节交换 78 3.6.1字节排序和ndarrays简介 78 3.6.2 更改字节顺序 80 3.7 结构化数组 82 3.7.1 介绍 82 3.7.2 结构化数据类型 83 3.7.3 索引和分配给结构化数组 88 3.7.4 记录数组 96 3.7.5 Recarray Helper 函数 98 3.8编写自定义数组容器 116 3.9子类化NDARRAY 124 3.9.1 介绍 124 3.9.2 视图投影 125 3.9.3 从模板创建 126 3.9.4 视图投影与从模板创建的关系 126 3.9.5 子类化的含义 126 3.9.6 简单示例 —— 向ndarray添加额外属性 132 3.9.7 稍微更现实的例子 —— 添加到现有数组的属性 134 3.9.8 __array_ufunc__ 对于ufuncs 135 3.9.9 __array_wrap__用于ufuncs和其他函数 139 3.9.10 额外的坑 —— 自定义的 __del__ 方法和 ndarray.base 142 3.9.11 子类和下游兼容性 143 4. 其他杂项 144 4.1 IEEE 754 浮点特殊值 144 4.2 NUMPY 如何处理数字异常的 146 4.3 示例 146 4.4 连接到 C 的方式 147 4.4.1 不借助任何工具, 手动打包你的C语言代码。 147 4.4.2 Cython 148 4.4.3 ctypes 148 4.4.4 SWIG(自动包装发生器) 149 4.4.5 scipy.weave 149 4.4.6 Psyco 149 5. 与MATLAB比较 149 5.1 介绍 150 5.2 一些关键的差异 150 5.3 'ARRAY'或'MATRIX'?我应该使用哪个? 151 5.3.1 简答 151 5.3.2 长答案 151 5.4 MATLAB 和 NUMPY粗略的功能对应表 153 5.4.1 一般功能的对应表 153 5.4.2 线性代数功能对应表 154 5.5 备注 161 5.6 自定义您的环境 163 5.7 链接 164 6. 从源代码构建 164 6.1 先决条件 164 6.2 基本安装 164 6.3 测试 165 并行构建 165 6.4 FORTRAN ABI不匹配 165 6.4.1 选择fortran编译器 166 6.4.2 如何检查BLAS / LAPACK /地图集ABI 166 6.5 加速BLAS / LAPACK库 166 6.5.1 BLAS 166 6.5.2 LAPACK 167 6.5.3 禁用ATLAS和其他加速库 167 6.6 提供额外的编译器标志 168 6.7 使用ATLAS支持构建 168 7. 使用NUMPY的C-API 168 7.1 如何扩展NUMPY 168 7.1.1 编写扩展模板 169 7.1.2 必需的子程序 169 7.1.3 定义函数 171 7.1.4 处理数组对象 175 7.1.5 示例 180 7.2 使用PYTHON作为胶水 182 7.2.1 从Python调用其他编译库 183 7.2.2 手工生成的包装器 183 7.2.3 f2py 184 7.2.4 用Cython 191 7.2.5 ctypes 196 7.2.6 您可能会觉得有用的其他工具 206 7.3 编写自己的UFUNC 208 7.3.1 创建一个新的ufunc 208 7.3.2 示例非ufunc扩展名 209 7.3.3 一种dtype的NumPy ufunc示例 215 7.3.4 示例具有多个dtypes的NumPy ufunc 221 7.3.5 示例具有多个参数/返回值的NumPy ufunc 230 7.3.6 示例带有结构化数组dtype参数的NumPy ufunc 235 7.4 深入的知识 241 7.4.1 迭代数组中的元素 242 7.4.2 用户定义的数据类型 246 7.4.3 在C中对ndarray进行子类型化 249