荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

  • A+
所属分类:鹿鼎平台登陆
摘要

新智元报导来源:Nature编辑:小智、QJP【新智元导读】在人工智能时期,NumPy可谓是众所周知。它是 Python 中最经常使用的数组编程库,在物理学、化学、

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

新智元报导

来源:Nature

编辑:小智、QJP

【新智元导读】在人工智能时期,NumPy可谓是众所周知。它是 Python 中最经常使用的数组编程库,在物理学、化学、工程学、金融和经济学等多个领域的研究分析中发挥侧重要作用。近日,NumPy团队在Nature上发布了论文,回顾了NumPy的「前世今生」。「2020创新之源大会将于9月22日在中关村软件园召开,详细信息见文末海报,欢迎报名!」

NumPy是1个强大、紧凑和表达力强的语法来访问、操作和计算向量、矩阵和高维数组的科学计算库。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

NumPy 是构建Python 科学计算生态系统的基础。1些有特定需求的项目已开发了它们自己的类似 NumPy 的接口和数组对象。

由于其在生态系统中的核心肠位,NumPy 愈来愈多地充当这些数组计算库之间的「互操作层」,并与其利用程序编程接口(API)1起提供了1个灵活的框架,以支持未来的科学计算和工业分析。

NumPy的发展历程

早在上世纪90年代还没有NumPy的时候,当时流行的是「Numeric」,它是基于C语言编写的,在Python中提供了数组对象和array-aware函数。它最早的用处之1是引导 C 利用于劳伦斯利弗莫尔国家实验室的惯性束缚聚变研究。

为了处理来自哈勃空间望远镜的大型天文图象,「Numarray 」重新实现了 Numeric,增加了对结构化数组、灵活索引、内存映照、字节顺序变量、高效的内存使用、 IEEE 754标准毛病处理和更好的类型转换规则的支持。

虽然 Numarray 与 Numeric 高度兼容,但这两个软件包的差异已足够让全部开发者社辨别成两个派系。

而2005年 NumPy 的横空出世,成了「两个世界中的最好的统1」,它结合了 Numarray 的特性和Numeric 的small数组性能,同时也提供了丰富的C API。

15年后的今天,NumPy 支持着几近所有进行科学计算的 Python 库,包括 SciPy、Matplotlib、 pandas、 scikit-learn和 scikit-image等等。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

NumPy 是1个社区开发的开放源码库,它提供了1个多维 Python 数组对象和对其进行操作的array-aware函数。但由于其的简单易用的特性,NumPy array是 Python 中数组数据的实际上的交换格式。

NumPy 使用CPU对内存数组进行操作。为了利用现代化的、专门化的存储和硬件,最近几年出现了大量 Python 数组包。与 Numarray和Numeric 不同的是,这些新出现的库现在产生1些分歧,由于大量的工作都是构建在NumPy之上。

但是,为了向开发者社区提供新的和探索性的技术,NumPy 正在过渡到1种中央调和机制,这类机制指定1个定义良好的数组编程 API,并根据需要将其分配给专门的数组实现。

灵活的NumPy数组

NumPy中的array是1种数据结构,可以有效地存储和访问多维数组(也称为张量) ,并支持各种科学计算。

它包括1个指针和用于解释存储在其中的数据的元数据metadata,特别是「数据类型」、「形状」和「步长」。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

数据类型data type用来描写存储在数组中的元素的性质。数组元素具有相同的数据类型,数组中的每一个元素在内存中占用相同的字节数。数据类型包括实数、复数、字符串、时间戳和指向 Python 对象的指针等。

数组的形状决定了每一个轴上的元素数量,轴的数量是数组的维数。例如,向量可以存储为1维数组,视频信息是形状为 (t,m,n,3) 的4维数组。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

步长是要将线性存储元素的计算机内存解释为多维数组的必要条件,它描写在内存中向前移动的字节数,从1行跳到另外一行,从1列跳到另外一列等等。

例如,1个形状为(4,3)的2维浮点数组,其中每一个元素在内存中占用8个字节,要在连续的列之间移动,我们需要在内存中向前跳转8个字节,并访问下1行,即3 × 8 = 24个字节。因此,该数组的步幅为(24,8)。

NumPy 可以按 C 或 Fortran 内存顺序存储数组,首先对行或列进行迭代。这也代表允许用这些语言编写的外部库直接访问内存中的 NumPy 数组数据。

用户使用「indexing」索引来访问子数组或单个元素、「operators」如, 、-和 × 用于向量化操作、「@」用于矩阵乘法,和array-aware函数与 NumPy 数组进行交互;。

这些方法和操作1起为数组提供了易读、表达性强的高级 API,同时还可以通过底层来保证快速的运算。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

对数组进行索引和切片可以返回满足特定条件的单个元素、子数组等。数组乃至可使用其他数组进行索引。检索子数组的索引将返回原始数组的“视图” ,这样两个数组之间就能够同享数据,这为在限制内存使用的同时对数组数据的子集进行操作提供了1种强大的方法。

为了补充数组语法,NumPy 对数组履行向量化计算的函数,包括算术、统计和3角图形学等。「矢量化」、「在全部数组而不是单个元素上操作」对数组编程来讲是必不可少的。

这意味着以往使用C语言需要数10行代码才能表示的操作通常可使用1个简单清晰的Python表达式便可实现。这将产生简洁的代码,使得用户专注于他们分析的细节,同时NumPy还以近乎最优的方式处理数组元素循环。

在具有相同形状的两个数组上履行向量化操作时,应当产生甚么是不言而喻的。NumPy通过「广播」机制来允许维度不同的数组之间进行运算,并产生符合直觉的结果。例如可以把数组和标量进行相加,但是广播也能够推行到更复杂的例子,比如缩放数组的每列或生成坐标网格。

NumPy 还可以对数组进行其他1系列操作,如:reshape,concatenate,padding,search,sort,count等。它也为生成伪随机数提供了广泛的支持,并且可使用1些后端来履行加速线性代数,比如 OpenBLAS或 Intel MKL。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

总而言之,NumPy在内存中的数组表示法,类似数学的语法,和各种功效函数的组合构成了1个有效的和强有力的数组编程语言。

JDG和IG都是目前LPL战绩名列前茅的战队,那现在LPL最强上路是Zoom还是TS?

科学的Python生态系统

Python 是1种开源的、通用型的解释型编程语言,非常合适标准的编程任务,比如清算数据、与 web 资源交互和解析文本等。加上快速的数组运算和线性代数,科学家们可以用1种编程语言来完成所有的工作。这类语言的优势在于易于学习和教学,许多大学将其作为主要学习语言就是明证。

虽然 NumPy 不是 Python 标准库的1部份,但是它受益于与 Python 开发者的良好关系。多年来,Python 语言增加了新的特性和特殊的语法,使得 NumPy 具有更简洁、更容易浏览的数组表示。但是,由于它不是标准库的1部份,因此 NumPy 能够指定自己的发布策略和开发模式。

SciPy 和 Matplotlib 与 NumPy 联系是非常密切的。SciPy 提供科学计算的基本算法,包括数学、科学和工程等。Matplotlib 则可以生成图形和可视化。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

NumPy,SciPy 和 Matplotlib 的结合,加上先进的交互式环境,如 IPython或 Jupyter,为 Python 中的数组编程提供了坚实的基础。

科学的 Python 生态系统建立在这个基础之上,提供了几个广泛使用的库,这些库反过来又构成了许多领域特定项目的基础。NumPy 是array-aware库生态系统的基础,它设置文档标准,提供数组测试基础设施,并增加对 Fortran 和其他编译器的构建支持。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

许多研究小组设计了大型、复杂的科学计算的库,为生态系统增加了特定于利用程序的功能。例如,由EHT合作开发的用于射电干涉成像、分析和摹拟的 eht-imaging 库,我真的很喜欢韩国和中国职业选手认真对待排位的态度。 当选手表现的不职业的时候,还会有各种惩罚和禁赛。依赖于科学 Python 生态系统中许多较低层次的组件。

特别是,EHT 使用这个库进行了第1次黑洞成像。在 eht-imaging 中,NumPy 数组用于存储和处理处理链中的每一个步骤中的数字数据: 从原始数据到校准和图象重建。

SciPy 为1般的图象处理任务提供支持工具,如过滤和图象对齐,而 scikit-image 是1个扩大 SciPy 的图象处理库,提供更高级的功能,如边沿过滤器和 Hough 变换、优化模块履行最优化操作等。

NetworkX是1根据赛程安排法国队将会在最后两场世初赛的比赛当中分别对阵芬兰队和捷克队可以预感的是文森特-科莱教练1定会给马莱登很多上场时间从而表现自我不过虽然说法国队在第6窗口期的目的主要是为了练兵可这支球队当中一样有很多老将压阵诞生于年的巴伊在第5窗口期对阵捷克的比赛当中发挥出色而在第6窗口期当中他照旧会是球队的核心安德鲁·阿尔比蒂和保罗·拉各姆也都在大名单当中前者是非常出色的控卫后者则是极为出色的防守球员世初赛至今拉各姆已完成了多达次抢断个用于复杂网络分析的软件包,用于验证图象比较的1致性。Astropy处理标准的天文文件格式并计算时间坐标转换。Matplotlib 用于数据可视化和生成黑洞的终究图象。

这个生态系统还提供了IPython 或Jupyter等 非常合适探索性数据分析的工具。用户可以流畅地检查、操作和可视化他们的数据,并快速迭代以优化编程语句。

这些语句被拼接成命令式或函数式程序,或同时包括计算和叙述的Notebook。探索性工作的科学计算通常在文本编辑器或集成开发环境(IDE)(如 Spyder)中完成。这类丰富和高效的环境使 Python 在科学研究中遭到欢迎。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

最近几年来,数据科学、机器学习和人工智能的快速发展进1步大大推动了 Python 的科学利用。其重要利用的例子,如 eht 图象库,现在几近存在于自然科学和社会科学的每个学科。这些工具已成为许多领域的主要软件环境。

NumPy和它的 API 1样已变得无处不在。

数组激增和互操作性

NumPy 在 CPU上提供内存中的多维均匀类型的数组。它可以在从嵌入式装备到世界上最大的超级计算机上运行,其性能接近编译语言。

但是,科学数据集现在常常超过单台机器的内存容量,可能存储在多台机器上或云端。另外,最近对加速深度学习和人工智能利用的需求致使了专门的加速器硬件的出现,包括GPU,TPU,FPGA等。

由于其内存中的数据模型,NumPy 目前没法直接利用这类存储和专用硬件。但是散布式数据和 gpu、 gpu 和 fpga 的并行履行都很好地映照到了数组编程的模式: 因此现代硬件架构与利用其计算能力所需工具之间还存在着差距。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

Commuinty为弥补这1空白所做的努力致使了数组实现的激增。例如,每一个深度学习框架都创建了自己的数组; PyTorch、 Tensorflow、 Apache MXNet和 JAX 数组都具有以散布式方式在 cpu 和 gpu 上运行的能力,它们使用延迟计算来支持额外的性能优化。

SciPy 和 PyData/Sparse 都提供稀疏数组,稀疏数组通常包括很少的非零值,并且只在内存中存储这些值以提高效力。

另外,还有1些项目将 NumPy 数组构建为数据容器,并扩大其功能。通过这类方式,Dask 使散布式数组成为可能。

这样的库通常会模仿 NumPy API,由于这下降了新用户进入的门坎,并且为更广泛的社区提供了1个稳定的数组编程/服务接口,同时反过来又避免了破坏性的分裂,比如 Numeric 和 Numarray 之间的分歧。

但是,探索使用数组的新方法本质上还处于实验阶段,事实上,1些库(如 Theano 和 Caffe)已停止了发展。每当用户决定尝试新技术时,他们必须更改 import 语句并确保新库实现了他们当前使用的 NumPy API 的所有部份。

理想情况下,使用 NumPy 函数或语义在专门的数组上进行操作,可以简单地工作,这样用户就能够1次性编写代码,然后在 NumPy 数组、 GPU 数组、散布式数组等适当的数组之间进行切换,非常方便。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

NumPy 的API和数组协议向生态系统提供了新的数组

这些数组协议现在是 NumPy 的1个关键特性,预计只会愈来愈重要。NumPy 开发人员(其中许多人是本文的作者)反复改进和添加协议设计,以提高实用性和简化使用的方式。

讨论:NumPy也面临挑战

NumPy最初是由学生、教职员工和研究人员开发的,目的是为 Python 提供1个先进的、开放源码的数组编程库,该库可以避免费使用,不受许可证服务器和软件保护和加密的限制。

1开始只是尝试向 Python 添加1个数组对象,后来成为1个充满活力的生态系统的基础。现在,大量的科学工作依赖于 NumPy ,它不再是1个小型的社区项目,而是核心的科学基础设施。

荣登要优雅不要污古代网络现状Nature,时隔15年NumPy论文终发表!

在未来10年,NumPy的开发人员将该赛事中心将依照FIFA(国际足联)的标准进行建设占地面积约亩依照万人观赛标准进行建设面临几个挑战。

新的装备将会被开发出来,现有的专业硬件将面临摩尔定律逐步失效的情况。将会有更多的数据科学从业者使用 NumPy之外的工具。新1代语言、解释器和编译器,如 Rust55、 Julia56和 LLVM57,将创建新的概念和数据结构,来挑战NumPy的地位。

但不论如何,NumPy准备好了迎接这样1个不断变化的环境,并继续在交互式科学计算中发挥领导作用,不断满足下1个10年的科学计算需求。

参考链接:

中关村软件园20周年,品牌活动“创新之源”大会再升级!

9月22日,2020创新之源大会 —“科技气力创变未来”在中关村软件园国际会议中心召开。大会由中关村软件园主办,中关村软件园孵化器在日天津渤海银行女排与广东队的比赛中李盈莹斩获了全场最高的分那个津门球迷熟习的联赛“得分王”李盈莹又回来了而伴随这1高分的是李盈莹全场比赛还承当了全队最高的次1传从初出茅庐时的超强得分手到如今转型成为全面主攻手岁的李盈莹在全面提升着自己的技术能力同时还保存着自己进攻突出的特点、新智元、北京银行共同承办,约请到清华大学副校长、北京量子信息科学研究院院长薛其坤院士,清华大学电子工程系主任、信息科学技术学院副院长汪玉,科大讯飞联合开创人、讯飞创投董事长徐景明,搜狗公司CEO王小川,亚博团体副总裁、亚博有道CEO周枫,达闼科技开创人兼CEO黄晓庆,浪潮信息副总裁、浪潮AI&HPC总经理刘军 ,yabo自动驾驶业务中心总经理苏奎峰,新智元开创人兼CEO杨静等重磅佳宾出席。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: