未来

loading_params = dict(
    delimiter="\t", skiprows=1, dtype='U', usecols=0, comments=None
)

biggest_impact = np.loadtxt(
    "data/2021/biggestimpact_comments_master.tsv", **loading_params
)
other_changes = np.loadtxt(
    "data/2021/significantchanges_comments_master.tsv", **loading_params
)

# Filter
biggest_impact = biggest_impact[biggest_impact != '']
other_changes = other_changes[other_changes != '']
# Re-order
rng = np.random.default_rng(0xDEADC0DE)
rng.shuffle(biggest_impact)
rng.shuffle(other_changes)
# Reporting values
glue(
    '2021_num_biggest_impact',
    biggest_impact.shape[0],
    display=False
)
glue(
    '2021_num_other',
    other_changes.shape[0],
    display=False
)

在问卷调查结束时,我们请参与者分享他们对 NumPy 哪些变化会对其作为用户产生最重大影响的看法。

最大影响

我们向调查参与者提出了以下问题

对 NumPy 做出哪一项单一的即时更改会为您作为 NumPy 用户带来最大价值?

回答此问题的 103 名调查参与者的回答如下所示。

gen_mdlist(biggest_impact, "biggest_impacts_list.md")

展开以查看回答!

评论

更好的静态类型文档。1.21 版中的系统突然变得更难使用,而且我找不到关于如何使用它的文档。像“np.ndarray 的两个参数是什么”这样的问题很难通过文档来回答。

透明地将 NumExpr 与 NumPy 结合使用。

如果 NumPy 和 CuPy 合并,并且(希望因此)在 API 上有更多一致性,那就太棒了。RAM 绑定数组和 GPU 绑定数组之间的区别是技术性的,但作为开发人员和数据分析师,我们希望将它们视为等效的。这属于“重大新功能”类别,但您提问了。

使 numpy 函数可作为数组类的方法使用。

更多教程,展示何时 NumPy 是比使用更复杂(但可能更流行)的框架更好的选择

发布数组 API,以便其他库可以开始将其作为标准使用

Julia 集成

数组上的更多函数

文档中更清晰的示例

更好地支持分类数组和/或字符串数组!

我非常赞赏 NumPy 开发社区重新愿意接受更大的变化。赞一个

在 f2py 中支持更多现代 Fortran 特性。

更多关于如何在给定 2D 平面上操作和访问多维数组(通常是 3D)信息的示例。

目前没有什么紧迫的,以前用于统计和栅格分析的滑动数组视图是一个关键点

随处可见的文档字符串

更快的导入速度

如何高效处理数组

与 TensorFlow 和 PyTorch 等现有库有更好的兼容性。它们提供了类似 NumPy 的接口,这看起来很傻。

对我来说,一份更好的文档,当然是西班牙语的。也就是说,更及时的更新。(评论以西班牙语提交。)

新的构建系统。

减小包的大小

OpenBLAS 优化

性能非常好

文档的深色模式,或者将代码块背景从 #fafafa 改回 #f5f5f5,因为它有助于阅读代码。

https://numpy.com.cn/doc/stable/reference/arrays.nditer.html#single-array-iteration”

更独立于 CPython。例如,使用 HPy 作为接口。

numba 与 numpy 更好地兼容,但这更可能是 numba 的问题

我主要使用 numpy 进行数组和相关的低级数据操作,以及随机数生成。请不要改变任何这些功能的工作方式。

类似于 jax 中的 vmap 功能

扩展适用于图像处理的函数。(评论以日语提交。)

文档中更多使用案例。

自动微分

使其更容易下载和安装。(评论以西班牙语提交。)

生成 NumPy 管道的低依赖编译二进制文件,以便包含在原生库中

稀疏矩阵支持!

小数组性能

修复掩码数组并改进“鸭子数组”支持(尽管这更多可能需要向下游推进)。

提升速度。(评论以中文提交。)

更多 NumPy C API 文档和总体上更好的文档。

减轻与日期时间相关的麻烦。

OpenBlas 版本的更高性能。(评论以西班牙语提交。)

目前我正在研究直方图函数。

性能

一个更详细的广播版本。学生们很难掌握其底层规则。

引入惰性求值。

对缺失数据的良好支持。或者稀疏数组(不是 scipy 矩阵)

更好地支持 AMD 处理器

消除“import numpy as np”

与多精度数值包(例如基于 GMP 或 MPFR 的 mpmath)更好地集成

一个非常快速的线性矩阵问题求解器(目前在 np.linalg.solve 中),因为我的包依赖于运行该函数数万次来解决一个更大的数学问题。

改进的类型化

我认为一个展示 NumPy 用例的博客会很好。例如,https://matplotlib.net.cn/matplotblog

在 GPU 上运行更快。

GPU,多核特性。

增加在 GPU 上运行操作的支持

带物理单位的数组和计算。

此外,OpenBLAS 的文档(以及它与其他 BLAS 变体的区别)及其对并行性的支持几乎不存在,在生产中使用起来也很困难。”

更好的文档/SEO,NumPy 论坛。

更有效地找到问题答案或所需信息的方法。

包含小型项目的新教程。

numpy 中更多的统计功能。numpy.kurtosis 会很棒(它具有 numpy 的速度,并且能够处理 Ndarrays,就像 numpy.var 一样)

添加带有对数和指数技巧的矩阵乘法(我经常处理概率)

更好的调试工具

1. 最大限度地简化接口(调用子例程)

哈哈哈,原生 CUDA 支持 :)

更快的“map”

原生 GPU 选项。

更好的错误消息

如果 NumPy 有助于改进 CPython C-API。为了提高 Python 的整体性能,CPython 核心开发人员可能需要对 C-API 进行破坏性更改,但如果这会破坏 NumPy 和 PyData 堆栈,他们就不敢这样做。由于 NumPy 是如此基础,它需要参与其中才能成功。

文档中的许多示例

提供更多示例的文档,以便更好地理解使用某些功能的上下文。(评论以西班牙语提交。)

改进 NumPy 背后的统计功能(例如 numpy quantile)。

引入用户友好的时间序列数据操作,类似于 stride_tricks 但更直观且有更好的文档。

2. 为结构化稀疏系统(如块稀疏)添加直接稀疏求解器”

使用 JIT 提高性能。由于 NumPy 非常流行,在 NumPy 内部内置 JIT 编译器将使使用 NumPy 编写小型类 C 片段变得非常强大。

为变量、数组和计算添加单位。

我想要类似于 Jax 库中的 fori_loop 函数。

长期稳定性。Python 生态系统中的许多人痴迷于新的闪亮事物,而不是能够长期稳定运行的健壮工具。我很想知道我用 Python 3.4 编写的代码现在是否仍然有效,但设置起来可能会异常困难。

无论如何,NumPy 做得非常出色,很高兴能掌握这个工具!”

更多的 SIMD 可能是最容易实现的。这和完整的类型支持。

加速

实现物理单位。

更多特殊函数

到处使用 Markdown(例如,文档和文档字符串),而不是 reStructuredText。

更好的 einsum 文档

可能是快速矩阵重复乘积(即对于矩阵 a-z,y = a@b@c@…@z)。这有点专业化,但我几乎每天都在研究中使用它。

更多与 TensorFlow 的集成

更多用于掩码数组的函数,以及/或者在不专门针对掩码数组的函数中处理掩码数组。例如,与其使用 np.ma.sum,不如在 np.sum(…, masked_values = True, masked_value_handling=’ignore’) 中提供一个选项,或者类似这样的功能,那就太好了。

可定制的数据类型 (dtypes)

改进随机模块的便利性。(评论以日语提交。)

可扩展的用户数据类型 (dtypes)

API 页面旁边的示例。

文档应该更详细。

多输出的 Einsum

更多关注文档。提供更多“快速入门”和“操作指南”。确保文档中的所有代码都可以从网站上轻松下载(复制/粘贴)。

一个成熟、完整的稀疏数组解决方案。我最初使用 SciPy,但 numpy.matrix 的废弃造成了破坏性影响,因为我的代码依赖于矩阵的一个怪癖,而这在数组中不起作用。我目前正在使用 sparse,但它尚未成熟,最近的更改也破坏了代码,而且一些 numpy 示例与稀疏等价物不兼容。

为非研究人员提供更好的文档。作为一名软件工程师/架构师,我需要了解内存如何分配、何时复制内存(vstack、view)、给定算法的圈复杂度是多少以及如何实现并行处理(pThreads)。这在整个 ML 堆栈中大多缺失,我经常不得不阅读源代码来猜测。

速度

文档中更多示例

允许“for x in a:”而不是“for x in np.nditer(a):”

能够检测特殊结构(三角、带状、Hessenberg 等)并使用适当求解器的 numpy.linalg.solve。

并行化。

任何可以增加的性能提升都会对下游项目产生巨大影响。

其他重大改变

最后,我们请参与者分享任何其他能显著改进 NumPy 的变化。回答此问题的 56 名参与者的回答如下所示。

gen_mdlist(other_changes, "other_changes_list.md")

展开以查看回答!

评论

更少的数值误差;linalg 包中更多类似 rref 的计算。

为新贡献者提供更清晰的渠道

类型提示

为西班牙语受众提供更多内容。(评论以西班牙语提交。)

修复不直观的函数。(评论以日语提交。)

允许整数数组中存在 NaNs。

与提供类似 numpy API 的 GPU 库更好地互操作。

一流的稀疏性支持

CUDA 和其他 GPU 支持

引入凸优化求解器。

更多关于保存/加载结构化/记录数组(即,带 Pandas 冗余的 Pandas)数组数据的文档

招聘更多领域更广的开源实习生。

一个 NumPy 讨论区来帮助提问。

f2py 应该拆分成单独的包。

或许一些自动 GPU 支持会很好。

使 numpy 函数可作为数组类的方法使用。

不要陷入那个陷阱:NumPy 实际上令人愉悦地稳定。

更好地支持现代 Fortran 的 f2py

不规则数组

谨慎考虑弃用的影响,以及应用程序可能对已弃用版本产生的依赖。

JAX 和 SciPy 集成

文档翻译以触及更多人。(评论以西班牙语提交。)

命名空间合理性。主命名空间过于拥挤。

总的来说,我觉得它很棒。没有它我就无法完成我的工作。目前的示例很棒,但有时我发现它们在解释代码*实际*在做什么方面有点过于简短。

增加对简单、高质量图表的支持,这样我们就可以避免 Matplotlib 的噩梦。

更多协调,以实现其他数组库可以定位的统一 NumPy API。

算法微分。

也许您的一些函数应该由其领域的专家根据参数、文档和结果进行评估。这些经验可以在网站上记录。

与 Matlab 进行基准测试

将稀疏数组包含到 numpy 中,并提供更复杂的稀疏功能(更健壮的求解器)

我希望看到一些活动,我们邀请开源研究人员将其论文实现在 NumPy 核心中,就像一场比拼谁拥有最快 FFT 的比赛一样

循环会很酷……即使它是一个向量库

某种跟踪内存使用情况的方法。

将 NumPy/Numba/CuPy/Xarray 集成/整合到一个统一框架中,用于 CPU 和 GPU 的 JIT 编译

设备放置

带类型支持的 f2py

继续执行类似移除金融函数的操作。

转向仅使用受限的 Python C-API

与 PEP 484 和 PEP 526 更好的兼容性。

更清晰/更快的 API(作为函数有意义的东西不应该用*慢速*类来实现)

更多地关注使用类型提示。

多进程

稀疏矩阵支持!

抱歉,对于非标准数组和尽可能透明地使用多核。

使用更多运算符,更短的语法

对低秩数组(特别是 0、标量和 1、向量)进行适当/统一处理;更像 APL / J。

多目标优化、熵方法、神经网络、图论、决策树等功能。(评论以中文提交。)

轰鸣轰鸣,让它更快🏎🏎

更多维护者(即资金)——在没有信心有人会审查我的补丁(由于项目的志愿性质)的情况下,很难为库做出贡献

更好的构建系统,以及一些关于如何使用它的文档(特别是用于构建 FORTRAN 扩展)。

难以判断。这确实是最好的代码之一。

内置 GPU 支持,意味着当 GPU 速度更快时,NumPy 会自动使用 GPU 而非 CPU,无需用户干预。

并行性

如果能从 Fortran 调用 Python 就好了!我写一个子程序,比如用 Docker 风格打包它,然后从 Fortran 调用它。

我觉得 HPy 的东西非常酷,但我还没用到它。

也许 Jupiter notebook 的某些插件能帮助我。