NumPy入门指南:科学计算的基础

5星 · 超过95%的资源 需积分: 10 12 下载量 8 浏览量 更新于2024-07-19 收藏 572KB PDF 举报
"这是一份NumPy用户指南,版本1.13.0,由NumPy社区编写,日期为2017年6月10日。这份指南旨在为初学者提供NumPy的入门介绍,涵盖了如何安装以及如何使用NumPy的主要特性。包括设置、快速启动教程、NumPy基础、杂项、NumPy对MATLAB用户的指引以及从源代码构建NumPy等内容。此外,还提供了详细的函数和类参考文档。" 在Python数据科学领域,NumPy是一个不可或缺的库,它主要关注于高效处理多维数据。NumPy的核心是`ndarray`对象,这是一个多维数组,可以用来存储同类型的元素集合。这个数据结构比Python内置的列表在处理大量数据时有显著的性能优势,因为NumPy数组是固定大小的,并且在内存中连续存储,这使得计算速度大大提升。 1. **NumPy基础**: - `ndarray`:NumPy数组,可以是任意维度,支持广播功能(Broadcasting),即不同形状的数组可以进行数学运算。 - 数据类型:NumPy支持多种数值类型,如`int`, `float`, `complex`等,以及更具体的如`int32`, `float64`等。 - 创建数组:通过`numpy.array()`函数创建数组,也可以用`numpy.zeros()`, `numpy.ones()`, `numpy.empty()`等创建特定值填充的数组。 - 数组操作:包含数组的索引、切片、排序、形状变换等。 - 数学运算:提供了丰富的数学函数,如加减乘除、指数、对数、三角函数等,可直接作用于数组上。 2. **快速启动教程**: - 基本导入:首先需要导入NumPy库,通常用别名`np`,如`import numpy as np`。 - 创建数组:例如,`a = np.array([1, 2, 3])`创建一个一维数组。 - 数组运算:如`b = a * 2`将每个元素乘以2,或`c = a + b`进行数组加法。 - 数组属性:`a.shape`返回数组的形状,`a.dtype`返回数组的数据类型。 3. **NumPy与MATLAB用户的对比**: - MATLAB用户会发现NumPy的语法和功能与MATLAB相似,但Python语言本身有着不同的编程哲学。 - MATLAB中的向量和矩阵操作在NumPy中通过数组实现,但NumPy数组可以有多个轴,而MATLAB通常限于二维数组。 - MATLAB中的某些函数在NumPy中有相应的替代品,如`numpy.linalg`模块提供了线性代数函数。 4. **杂项**: - 文件输入输出:NumPy支持多种文件格式,如二进制的`.npy`和`.npz`,以及文本格式如CSV,通过`numpy.save()`, `numpy.load()`等函数。 - 随机数生成:`numpy.random`模块提供各种随机数生成器,用于模拟和统计测试。 - 索引和选择:NumPy数组支持高级索引,可以按条件选择数组元素。 5. **从源代码构建NumPy**: - 对于开发者,可能需要从源代码编译安装最新版本的NumPy,这涉及获取源代码、配置环境、编译和安装步骤。 6. **NumPy C-API**: - NumPy提供C API,允许其他C/C++代码直接与NumPy数组交互,增强了与其他库的集成能力。 NumPy是Python科学计算的基础,其强大的数组处理能力使得数据预处理、分析和建模变得简单高效。无论你是初学者还是经验丰富的开发人员,这份用户指南都将帮助你深入理解和利用NumPy的功能。
898 浏览量
说明:本文档所有内容来源于网络 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