15年!NumPy论文终出炉,还登上了Nature( 三 )


NumPy 还包含可以创建、reshaping、concatenating 和 padding 数组 , 执行数据排序和计数 , 读取和写入文件的 array-aware function 。 这为生成伪随机数提供了大量支持 , 它还可以使用 OpenBLAS 或 Intel MKL 等后端执行加速线性代数 。
总之 , 内存内的数组表示、紧密贴近数学的语法和多种 array-aware function 共同构成了生产力强、表达力强的数组编程语言 。
科学 Python 生态系统
Python 是一个开源、通用的解释型编程语言 , 非常适合数据清洗、与 web 资源交互和解析文本之类的标准编程任务 。 添加快速数组操作和线性代数能够让科学家在一种编程语言中完成所有的工作 。
尽管 NumPy 不是 Python 标准库的一部分 , 但它也从与 Python 开发者的良好关系中受益 。 在过去这些年中 , Python 语言已经加入了一些新的功能和特殊的语法 , 以便 NumPy 具备更加简洁和易于阅读的数组表示法 。 但是 , 由于 NumPy 不是 Python 标准库的一部分 , 所以它能够规定自己的发布策略和开发模式 。
从发展史、开发和应用的角度来看 , SciPy 和 Matplotlib 与 NumPy 联系紧密 。 SciPy 为科学计算提供了基础算法 , 包括数学、科学和工程程序 。 Matplotlib 生成可发表品质的图表和可视化文件 。 NumPy、SciPy 和 Matplotlib 的结合 , 再加上 IPython、Jupyter 这类高级交互环境 , 为 Python 中的数组编程提供了坚实的基础 。
如图 2 所示 , 科学 Python 生态系统建立在上述基础之上 , 它提供了多种广泛应用的专有技术库 , 而这又是众多领域特定项目的基础 。 NumPy 是这一 array-aware 库生态系统的基础 , 它设置了文档标准、提供了数组测试基础结构 , 并增加了对 Fortran 等编译器的构建支持 。

15年!NumPy论文终出炉,还登上了Nature
本文插图
图 2:NumPy 是科学 Python 生态系统的基础 。
很多研究团队设计出大型、复杂的科学库 , 这些库为 Python 生态系统增添了特定于具体应用的功能 。 例如 , 由事件视界望远镜(Event Horizon Telescope, EHT)合作项目开发的 eht-imaging 库依赖科学 Python 生态系统的很多低级组件 。 而 EHT 合作项目利用该库捕获了黑洞的首张图像 。
在 eht-imaging 库中 , NumPy 数组在流程链的每一步存储和操纵数值数据 。
基于数组编程创建的交互式环境及其周边的工具生态系统(IPython 或 Jupyter 内部)完美适用于探索性数据分析 。 用户可以流畅地检查、操纵和可视化他们的数据 , 并快速迭代以改善编程语句 。 然后 , 将这些语句拼接入命令式或函数式程序 , 或包含计算和叙述的 notebook 。
超出探索性研究的科学计算通常在文本编辑器或 Spyder 等集成开发环境(IDE)中完成 。 这一丰富和高产的环境使 Python 在科学研究界流行开来 。
为了给探索性研究和快速原型提供补充支持 , NumPy 形成了使用经过时间检验的软件工程实践来提升协作、减少误差的文化 。 这种文化不仅获得了项目领导者的采纳 , 而且还被传授给初学者 。 NumPy 团队很早就采用分布式版本控制和代码审查机制来改善代码协同 , 并使用持续测试对 NumPy 的每个提议更改运行大量自动化测试 。
这种使用最佳实践来制作可信赖科学软件的文化已经被基于 NumPy 构建的生态系统所采用 。 例如 , 在近期英国皇家天文学会授予 Astropy 的一项奖项中表示:「Astropy 项目为数百名初级科学家提供了专业水平的软件开发实践 , 包括版本控制使用、单元测试、代码审查和问题追踪程序等 。 这对于现代研究人员而言是一项重要的技能组合 , 但物理或天文学专业的正规大学教育却常常忽略这一点 。 」社区成员通过课程和研讨会来弥补正规教育中的这一缺失 。


推荐阅读