未来

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

biggest_impact = np.loadtxt(
    "data/2020/biggestimpact_comments_master.tsv", **loading_params
)
other_changes = np.loadtxt(
    "data/2020/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(
    'num_biggest_impact',
    biggest_impact.shape[0],
    display=False
)
glue(
    'num_other',
    other_changes.shape[0],
    display=False
)

调查结束时,我们请参与者分享他们认为对 NumPy 进行哪些更改会对其作为用户产生最重大的影响。

最大影响

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

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

回答此问题的 239 名调查参与者的回复如下。

gen_mdlist(biggest_impact, "biggest_impacts_list.md")

展开查看回复!

评论

无需复杂语法即可使用不同 CPU 核心并行计算不同数组的简单可能性

更广泛地触达普通用户。(原文:Mayor alcance a las usuarias en general。)

自动微分

更好的错误消息和错误处理。有时 NumPy 会出现不正确的语句,并包含非错误消息预期的文本。

用户定义的标量类型(例如高精度浮点数)

与 xarray API 的一致性,将 numpy.random 与 Jax 结合使用的迁移路径

速度更快!我使用 NumPy 因为它很快——我希望它更快。还有关于如何使用性能特性的文章和技巧(我想到了 out 关键字参数)

更好的错误跟踪(GitHub 上当前开放但重复的错误数量过多)

将 NumPy 和 SciPy 合并为一个项目/库。(原文:Unir Numpy y Scipy en un único proyecto / librería。)

一个明确定义且更小的 API,与 Dask、CuPy 和其他数组库 100% 兼容。

信号处理和滤波器设计工具(SciPy 中工具的轻量级版本)

不确定。我通常很喜欢 NumPy!也许可以更正式地将 Minuit 优化包纳入 NumPy 生态系统。

无情地将方法标准化为 `snake_case`,而不是“有时是 `.foobar()`,有时是 `.foo_bar()`”

文档应更具交互性

大多数文档示例都非常简洁,仅说明了 API 的少数几种用法。

更容易/原生读取 Fortran 二进制文件

全面的类型(mypy)支持,包括维度、形状和 dtype。

新手教程

最佳实践

更好的类型注解

Matplotlib 中 1:1 图像显示的正确方法

示例和文档

小型矩阵优化

对 `size` 和 `shape` 参数的统一使用 :p

时间积分的多功能边界条件

类型提示

并行化

更多操作指南

更好的文档

评论

性能改进

更多与可视化工具结合使用的示例

我很想看到一些系列视频或网络研讨会来教授 NumPy

与其他底层数组库的互操作性。

GPU

文档可访问性

改进文档以添加更清晰的示例(可能包含一些可视化)

更直观的 dtype 系统。

对函数(数组、列表、元组……)可以接受的序列类型减少挑剔(尽管这可能是一个普遍的 Python 问题)。

更清晰的文档

添加齐次变换

停止将零维数组解包为标量。

GPU 支持

更容易理解的多维操作文档(从堆栈/滚动到任何操作)

矩阵运算

求和并行化。(原文:Paralelismo en sumatorias。)

默认多线程

也许更容易在库之间移动数据,尤其是深度学习。

与单位库集成

轻松绘制数据

更好的字符串数组支持和性能

更多使用示例(特别是针对我的特定领域)。

文档

更清晰地回馈社区的机会

整数数组的 `np.nan`

默认使用列向量而不是一维向量。

多线程 einsum

与 pandas 更紧密的协作

文档改进

像 Jax 一样的 CUDA 后端

作为优化库

更多线性代数教程和用例

Jupyter 中更好的数组表示?

与 Python 更大程度的集成。(原文:Mayor integración con Python。)

成为一个框架

可空整数

`numpy.dot` 应该适用于形状为 `(…,n) x (n,…) `的数组。

速度

其他框架更多地采用 `__array_function__` 协议

更小的指导委员会

类型注解。(但我听说它快来了!)

更多文档

随机线性代数

文档和示例

一个 API/一组钩子,允许像 concatenate 这样的函数创建鸭子数组/子类。

更快的 FFT。

全面文档

我经常遇到浮点舍入错误,有时会导致严重的 Bug。这似乎源于 `np.loadtxt`。

F2py 处理 Fortran 2008 并实现线程安全

NEP 21

将四元数集成作为基本类型。(原文:Integrar los cuaterniones como un tipo básico。)

对新手不友好,NumPy 太复杂。

简单而高效的并行化(如 Mathematica 的 ParallelMap)。

随机线性代数;具体来说是寻找 `LinearOperator` 行列式的能力。这可能更适合 SciPy 而不是 NumPy

为什么 `zeros()` 使用 `shape`,而 `randint()` 使用 `size`?我总是忘记哪个是哪个。

模拟工具(蒙特卡洛方法,随机数生成)。(原文:Herramientas para simulaciones (método Monte Carlo, generación de números aleatorios)。)

创建可靠的二进制格式存储选项。

更快的掩码数组

作为用户,可能是改进文档的清晰度/一致性

增加特殊函数的种类。(原文:特殊関数の種類を増やします。)

静态类型

更好的原生 GPU 集成

更快的小数组

把 NumPy 的名字改成 `np`!!!

更好的包文档。

与 SciPy 之间更清晰的 FT 分离——两个等效但有差异的模块!

自动微分 [但我不太确定我希望它出现在 NumPy 中!]

复制与原始数组规范

GPU 后端 :)

修复掩码数组并使其成为“一等公民”。

社区方面的一些东西,我确定。

Cython 中新的 nditer C API 支持

硬件加速器支持

性能与 Rust ndarray 相当(根据我的经验,正确使用时 Rust ndarray 快约 2 倍)

在文档中添加一个 HOWTO 示例,说明如何使用 Cython 编写的 gufunc 扩展 NumPy

这是一个很大的要求,但如果 NumPy 可以在 GPU 上运行会很好

处理速度。(原文:処理速度。)

一份描述使用 NumPy 进行科学计算的最佳实践文档,目标用户是计算机科学知识有限的研究人员。

效率

整数计算,例如质因数分解

ndarray 如何显示为 2D 列表而不是矩阵

添加将更多函数用作方法的选项。对于许多操作(`sum`、`max`、`argmax`、`real/imag`...),我们可以选择将其作为函数或方法访问。而许多其他函数(`abs`、`angle`、`diff`、`sin`、`cos`...)只能作为函数使用。有时将这些作为方法编写代码会更简洁。

某些统计或线性代数函数同时存在于 SciPy 和 NumPy 中,这让我感到困惑。

使用字符串索引定义 NumPy 数组

可选的并行计算

与其他工具包更好的集成

很难说。NumPy 可能是我最喜欢的库。如果非要说,也许是一个为新手和中级用户开发的课程。

更健壮的文档

性能提升。(原文:パフォーマンスの向上。)

GPU 使用

更多实际应用示例。但这主要不在 NumPy 的控制范围内。

在 GPU 上运行的能力。

更多教程

再次让 `numpy.unique()` 处理包含 None 的对象数组——这在 Py2 中是可行的。

任何有助于人们自信更新的东西——我项目的 BDFL 仍然使用 Py27,让他升级到 1.14 就像拔牙一样困难。即使我根据项目使用 1.16 和 1.18,他也很紧张,因为他记得“有一次 NumPy 改变了视图的处理方式”。

提供能阻止 PyTorch、TensorFlow、JAX 等重新实现 NumPy 并碎片化生态系统的功能。我认为这仅仅是 CPU/GPU 透明度(即吸收 CuPy)。我们不想回到 Numeric 与 NumArray 时代!

文档中的教程和更多示例

改进 SEO,使最新文档在搜索中排名靠前。我经常会看到指向 1.15 文档的链接。

可移植性

自定义 dtype

沿轴的线性插值

能够使用 `.T` 变换将一维水平数组转换为二维垂直数组。

更好的文档。示例。以及底层逻辑的解释。它已经很好了。但总能更好。

速度和易用性。(原文:Velocidad y facilidad de uso。)

更易读的文档会很受欢迎,但除此之外 NumPy 已经很棒了!

`np.unique` 应该接受一个容差关键字,如果浮点数之间的差异小于容差,则将其视为相同。

最佳实践和最优/次优用法的性能比较,以及这方面的教程/文档

文档(教程)

这可能不太可能,但如果在 Python for 循环中有一种快速迭代数组的方法,将使某些操作更容易。

我可以自豪地说,我希望看到的所有改进(例如文档方面)都将是巨大的,没有唾手可得的成果。

ndarray 的操作(索引、重塑等)可以更透明一些。

更多用于调试的错误消息

当我的数组包含字符串时,我通常会放弃使用 NumPy。也许有更好的方法?

指导(更深入地参与 NumPy)。一些较少使用的功能我完全不了解,除了文档之外,很难找到相关教程/材料。

多线程函数

更好的文档

如果 NumPy 提供一个 API,可以评估不同函数调用(例如 `np.mat` vs `np.array`,或 `np.dot` vs `np.einsum`)在给定输入数据下的性能成本/收益,那将非常棒。这将使比较和确定在特定情况下应该使用什么变得更容易。

更多 2D 和 3D 图像功能

命名维度

低级解释

更多面向高级用户的文档,以实现最大性能

我希望有明确的指针语法

静态类型提示

性能

不规则数组/dtype

与 JAX 合作添加 NumPy 协议。这样我就可以随心所欲地使用任一库了!

N 维线性插值

为点积添加“a.b”表示法

低级并行计算

更快

清晰简洁地连接一维数组以形成形状为 (N, 2) 的数组。目前使用 `np.vstack((…)).T`。

一些财务模块,但除此之外,它现在已经很棒了

更好的教程和/或更简单的方法来创建 ufuncs

支持任意容量(int8、int16 等)的有理数。这对于化学计量计算是必需的,特别是用于计算计量矩阵的零空间。

使 API 参考不那么随意。请参阅 Java 文档以获取理想模型。

更快的多线程操作(但这超出了范围,我很乐意使用其他库)

[老实说,它很完美]

标记数组

CUDA 集成……

一个编写和提交关于如何在 NumPy 中实现功能的教程的地方,以及将 NumPy 函数链接到这些教程的方法。

数据可视化支持(matplotlib 通常太复杂)

GPU 使用

优化

并行化功能

线性代数包装器更好的文档

JIT

将 C 代码与 Python 代码分离:减少对 CPython C-API 的广泛使用

更多可视化工具

类型注解支持

NEP-35 和 NEP-37 广泛采用

`.index()` ……我已经认真考虑过为此完全放弃 NumPy 转而使用 PyTorch,坦率地说,考虑到时间之久,即使 NumPy 今天添加了 `.index()`,这样做也可能是明智的。

更多更好地使用 NumPy 处理更真实数据的示例。(原文:Más y mejores ejemplos de uso de Numpy con datos más realistas。)

超大数组的替代方案(内存错误)。(原文:Alternativas a arrays muuuy grandes (memory error)。)

合约简化(主要是语法糖方面)

加权分位数。我正在研究。

Conda 以外的 MKL 库打包(wheel)。(原文:conda以外のmklライブラリのパッケージ化(wheel)。)

CUDA

GPU 支持

f2py 中更好的现代 Fortran 支持

更用户友好的线性代数向量类

`numpy.linalg` 和 `scipy.linalg` 之间的同步。

颠簸数组的一致空值处理

更易于理解的文档

更好的性能(并行化)

(py)FFTW 后端

f2py 的更新文档

一个更一致的 API,也许?(原文:Uma API mais consistente, talvez?)

添加一种方法来跟踪单位并显示带单位的答案

文档

文档

可用性。使其更简单易用

更快 ;)

利用固有并行性提升性能。

拥有更好的文档和教程。

文档页面上更好的示例。我几乎总是不得不查看 Stack Overflow 才能更好地理解函数。

更好地控制数组内存。

语言无关的 API

高效向量化

函数文档中应澄清是视图操作还是复制操作。(原文:Une clarification dans la documentation des fonctions pour savoir rapidement si elle travaille en vue ou en copie。)

易于理解的文档……当前的文档模式使新学习变得困难

处理大于内存的数组的更简单方法

更好的文档,包含更多示例和用例。

提供更多示例和文档,提供用例,重新设计文档页面

与 Numba JIT 和 CUDA 更多集成

关于如何高效使用 NumPy 功能(ufunc 等)的更好教程/文档

更多广泛和教程式的文档,像 Stack Overflow 那样带有连续示例

支持 NA/缺失值

增强的随机数支持。(原文:Mayor soporte de random。)

你们为什么要用阴性形式说话?(原文:Por que habláis en femenino?)

编码“最小 NumPy”

希望有一个功能,能够在一个步长内提取数组的最小值和最大值(带有可选的轴参数)

GPU

多线程 2 维和 3 维 FFT

添加我请求的功能

变得更快。Python 效率不高,NumPy 默认情况下没有帮助。

更好的 SWIG 替代方案,用于封装用 C++ 编写的专有 I/O 库

我认为你的掩码数组实现有点笨拙。掩码和底层数据数组之间的关系可能会让人困惑。特别是,填充值的行为令人困惑。在数据数组中将某物设置为填充值不会改变掩码。改变掩码似乎不会更新数据数组。我有一段时间没有处理这个问题了,但这可能会让人困惑。

允许用户执行移除一个维度的操作。例如将 (3,4) 形状的矩阵添加到 (3,) 形状的向量。

我希望在最复杂的领域有西班牙语文档。(原文:Me gustaria documentacion en español en las areas mas complejas。)

NumPy 和 SciPy 在重叠领域(例如线性代数)之间更清晰的分离

NumPy 数组的内置可视化支持。这将使高维数组的可视化更容易。

允许使用另一个数组对数组进行切片

NumPy <---> netCDF 示例。我知道如何操作,但格式之间的“交换”应该有更好的文档。

更多从 100 到 500 简单级别的实践

访问库特定部分的方法,因为将 NumPy 投入生产环境很“重”。(原文:Manera de acceder a partes específicas de la librería ya que poner numpy en produccion es pesado。)

提高性能

ONNX 支持

变得更对开发者友好

GPU 加速

其他重要改变

最后,我们请参与者分享任何其他能显著改进 NumPy 的更改。回答此问题的 110 名参与者的回复如下。

gen_mdlist(other_changes, "other_changes_list.md")

展开查看回复!

评论

适应性

西班牙语文档

我不明白为什么 `np.random.rand(10,10)` 可以,而 `np.ones/zeros(10,10)` 不行。

直接 GPU 支持,不使用 Numba 等其他包

抛弃 pandas

JavaScript API 和 GPU 支持

GPU 支持。其他语言支持(Rust、PHP、JavaScript)

内置跨机器并行化

重组和简化文档

减小体积,将小众模块拆分为独立项目

类型注解,它们在支持的 IDE 中大大有助于简化开发

GPU 适配,优化工具

添加静态类型

我喜欢这个贡献指导计划的想法 :)

在低计算资源环境下运行的能力。(原文:Capacidad de correr en entornos de bajos recursos computacionales。)

内存映射 NumPy 数组并支持自定义硬件的 B

容量改进和插值。(原文:Mejoras en la capacidad e interpolación。)

非 pickle 序列化

更多关于质量和用法的沟通

用户定义的通用函数 (gufuncs)

在不是 C 或 Fortran 专家用户的情况下提高性能的教程。(原文:Tutoriales para mejorar rendimiento sin ser usuario experto de C o Fortran。)

尽管这可能不太可行,但如果能有限地在简单的循环式结构中编写“非向量化”的多行数学/逻辑(例如,Numba 等工具可能显得杀鸡用牛刀的情况),并优化循环开销(例如,某种局部静态类型化),那将是非常棒的。

使 `loadtxt` 和 `savetxt` 更对称和灵活

自动微分

Cython 交互有时很尴尬(我应该使用 Cython memoryviews 还是 ndarray?)

更紧密的集成/支持 NumPy 扩展,例如 Numba 和 CuPy

从我的角度来看,NumPy 最重要的是作为其他科学包构建的基础。我最常用的是 `scipy.stats`、Astropy 和 pandas。在这方面,我看不出 NumPy 有任何重大改变的必要。

更快 ;)

对专用计算硬件(GPU)的隐式支持

更类似于 R 的语法。(原文:Uma sintaxe mais similar a do R。)

没有:NumPy 很棒!

记录错误

更清晰的每个数组操作文档

发布一套明确的 API

与 PyPy 的真正兼容性

更好的文档

我喜欢 NumPy,感谢你们所有的辛勤工作!

GPU 支持将加速大型数组的一些计算。

更快的导入,减少对 conda-forge 的依赖

在大学中更广泛的采用。

MicroPython

数组模块

可移植性和独立性

对 CUDA 或 OpenCL 等技术的支持应该更透明。(原文:El soporte para tecnologías tipo cuda u OpencL debería ser más transparente。)

`numpy.matrix` 到底是怎么回事?

更详细的示例

支持 Mypy

以及并行和分布式功能,不确定它们是否已经可用。

*对新手不友好,NumPy 太复杂。

更好的类型系统,类似于 Julia

从经验丰富的用户那里征集教程材料

更好的 IDE 自动补全

向量的外积仍然相当令人困惑

扩展插值方法的数量。(Расширение количества методов интерполяции)

网站上也许可以有一些图形来澄清多维操作

类似 Google 的 JAX,具有微分功能和更快的速度。

更透明的 Numba(或类似 Numba)集成

澄清矩阵和数组的混淆情况,或者至少更彻底地解释它

微分方程

仅支持类型注解

更清晰的 C++ 接口

数值类型以外的缺失值数据类型。(原文:数値型以外の欠損値のデータ型。)

添加自动微分,启用命名张量轴(即使不是“标记的”,至少是“命名的”,以保持张量维度的语义清晰)

GPU 支持

现代化、更易读的 Sphinx 主题。弃用库中未使用或超出范围的部分。

我知道你们永远不会这样做,但 `matmul` 运算符几乎没用。我无法控制用户传入的是矩阵还是标量,而且在许多情况下,两者都是完全正确的。所以我的代码仍然只使用 `dot`。我读过“只有一种方法”的论点,那是胡说八道。我们没有不同的运算符来添加整数和浮点数,也不应该有。所以我在任何地方都使用 `dot(F, P).dot(Q)` 而不是 `F@P@Q`。这太难读了,而且容易出错(如果 F 不是矩阵,`F.dot(P)` 可能会失败)。我最初修改了一堆代码,用 `@` 替换 `dot`,但不得不全部删除,因为我收到了无数的异常。这是用于数学的软件——请让我们以合理的方式表达它!并把这些评论框弄大!一个单行框来输入“重大”更改?

自动微分

更多地理解低级函数

与使用 NumPy 编程的不同方式相关的性能测试。(原文:Pruebas de rendimiento relacionadas con las distintas formas de programar con Numpy。)

将 ndarray 像 Matlab 或 R 中那样视为矩阵

分布式计算

`sincos` 实现,`exp(1j * x)` 实现,向量化超越函数(例如,使用 Intel SVML/MKL 进行 `exp`、`sin` 等)

对象数组增强

自定义 FFT 内核

整个科学生态系统中类数组类型的更好协调

原生 numexpr-like 功能

用于与 PyPy 集成的 Hpy API

可选的自动并行化

任意精度和物理常数的添加(尽管这只是为了方便)。

指导示例

模块化

强调性能!并继续保持良好的工作——NumPy 很棒。

与其他语言的接口

将方法/算法合并到单个模块下,以减少导入(和搜索)。

它偶尔会在 Windows 和 VSCode 上崩溃或安装不正确。NumPy 专家可能需要做更多工作来解决这个问题。

更清晰的文档,带有更多交叉链接

推进掩码数组主题将是很棒的,曾有关于替代方案的想法,不确定解决方案是什么,但一个更通用和高效的解决方案将非常棒。

GPU 计算

更多凝聚力?——“做事的唯一正确方法”(标量),实际移除 `np.matrix`,更好地支持 `@` 等。

使平均值和标准差函数像 `nanmean` 函数一样考虑 `nan` 值。

与图表和大数据更好地集成。(原文:Mejor integración con gráficos y grandes volúmenes de datos。)

性能效率

GPU 支持

与 pandas 更多集成,尽管 pandas 更好。

Julia 的广播语法会非常棒!不知道如何实现。

拥有更广泛的社区(无论是人数还是成员多样性)

支持不规则数组

只需要更好的文档

物理单位管理。

与其他数组库更好的互操作性。

GPU 支持

全面支持类型提示

没有,你们在这个项目上做得非常出色,感谢你们的辛勤工作

整数数组的 `np.nan`

计算速度

用 C++ 重写项目而不是 C,并放弃 Fortran

高级 API

改进 NumPy 背后的概念和理论文档

使用模块和函数“树”对 NumPy 文档进行可视化。此外,如果我尚未看到的新“树”分支能用某种颜色标记,那将很有用。

更多为稀疏数组设计的功能