未来¶
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/一组钩子,允许像 |
更快的 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 文档进行可视化。此外,如果我尚未看到的新“树”分支能用某种颜色标记,那将很有用。 |
更多为稀疏数组设计的功能 |