15年!NumPy论文终出炉,还登上了Nature( 二 )
NumPy 使用 CPU 对内存内(in-memory)数组进行操作 。 为了利用现代的专用存储和硬件 , 最近已经扩展出一系列 Python 数组包 。 与 Numarray–Numeric 之间存在较大差异的情况不同 , 现在的这些新库很难在社区开发者中引起分歧 , 因为它们都是建立在 NumPy 之上的 。 但是 , 为了使社区能够使用新的探索性技术 , NumPy 正在过渡为核心协调机制 , 该机制规划了良好定义的数组编程 API , 并在合适的时候将其分发给专门的数组实现 。
NumPy 数组
NumPy 数组是一种能够高效存储和访问多维数组的数据结构 , 支持广泛类型的科学计算 。 NumPy 数组包括指针和用于解释存储数据的元数据 , 即 data type(数据类型)、shape(形状)和 strides(步幅) , 参见下图 1a 。
本文插图
图 1:NumPy 数组包括多种基础数组概念 。
数据类型描述了数组中存储元素的本质 。 一个数组只有一个数据类型 , 数组中的每个元素在内存中占用的字节数是一样的 。 数据类型包括实数、复数、字符串、timestamp 和指针等 。
数组的形状决定了每个轴上的元素数量 , 轴的数量即为数组的维数 。 例如 , 数字向量可存储为形状为 N 的一维数组 , 而彩色视频是形状为 (T, M, N, 3) 的四维数组 。
步幅是解释计算机内存的必要组件 , 它可以线性地存储元素 。 步幅描述了在内存中逐行逐列移动时所需的字节数 。 例如 , 形状为 (4, 3) 的二维浮点数数组 , 它其中的每个元素均在内存中占用 8 个字节数 。 要想在连续列之间移动 , 我们需要在内存中前进 8 个字节数 , 要想到达下一行 , 则需要前进 3 × 8 = 24 个字节数 。 因此该数组的步幅为 (24, 8) 。 NumPy 可以用 C 或 Fortran 的内存顺序存储数组 , 沿着行或列遍历 。 这使得使用这些语言写的外部库可以直接访问内存中的 NumPy 数组数据 。
用户使用「indexing」(访问子数组或单个元素)、「operators」(各种运算符)和「array-aware function」与 NumPy 数组进行交互 。 它们为 NumPy 数组编程提供了简明易懂、表达力强的高级 API , 同时还考虑了维持快速运算的底层机制 。
对数组执行 indexing 将返回单个元素、子数组或满足特定条件的元素(参见上图 1b) 。 数组甚至还可以用其他数组进行 indexing(参加图 1c) 。 返回子数组的 indexing 还可以返回原始数组的「view」 , 以便在两个数组之间共享数据 。 这就为内存有限的情况下基于数组数据子集进行运算提供了一种强大的方式 。
为了补充数组语法 , NumPy 还包括对数组执行向量化计算的函数 , 包括 arithmetic、statistics 和 trigonometry(参见图 1d) 。 向量化计算基于整个数组运行而不是其中的单个元素 , 这对于数组编程而言是必要的 。 这意味着 , 在 C 等语言中需要几十行才能表达的运算在这里只需一个清晰的 Python 表达式即可实现 。 这就带来了简洁的代码 , 并使得用户不必关注分析细节 , 同时 NumPy 以接近最优的方式循环遍历数组元素 。
对两个形状相同的数组执行向量化计算(如加法)时 , 接下来会发生什么是很明确的 。 而「broadcasting」机制允许 NumPy 处理维度不同的数组之间的运算 , 例如向数组添加一个标量值 。 broadcasting 还能泛化至更复杂的示例 , 如缩放数组的每一列或生成坐标网格 。 在 broadcasting 中 , 单个或两个数组可以重叠(没有从内存中复制任何数据) , 使得 operands 的形状匹配(参见图 1d) 。
其他 array-aware function(如加、求平均值、求最大值)都是执行逐元素的「reduction」 , 累积单个数组的一个、多个或所有轴上的结果 。 例如 , 将一个 n 维数组与 d 个轴进行累加 , 得到维度为 n ? d 的数组(参见图 1f) 。
推荐阅读
- 优译辑UegeSci|论文润色公司防坑指南?——优译辑UegeSci
- 社保|这类退休人员能安心了?留意了,社保未缴够15年可以按规这样办
- 军人|26岁女军官15年军龄,只因此技能太难得,她11岁被特招入伍
- 沈寅豪|越闹越大!鲁能球迷围攻同济大学官微,彻查沈寅豪论文抄袭还公道
- 超|张志超将获332万国家赔偿,被羁押15年后重获自由
- |社保未缴够15年都按规这样办,这类退休人员能“安心”了?今年起
- 央视网|被羁押15年后重获自由,张志超将获332万国家赔偿
- 搞笑吃货新天地|张良三年不吃五谷,15年后才知道他有多高明,刘邦逝世前
- 裁判|特评:从傅明被查论文到裁判“抢戏”郝伟 莫让执法软实力辜负第六联赛美名
- 黄宏|2015年,黄宏上午被免职,下午就被带走,今60岁现状让人心疼
