使用 Numba 追加到列表的最快方法是什么?

问题描述 投票:0回答:2

我正在创建一些执行大量列表追加的代码。它必须是高性能的,所以我使用 Numba

@jit
编译它。

我已经检查了列表上的Numba文档,但它没有提供太多关于附加到它们的最佳方法的信息。

我应该使用

list1 + list2
符号,还是应该使用
list1.append(value)

python list append numba jit
2个回答
0
投票

当您将大量元素附加到列表时,使用 append 方法比使用 + 运算符性能更高,尤其是在处理大型列表时。这是因为 append 方法就地修改了原始列表,而 + 运算符创建了一个新列表并将两个输入列表中的所有元素复制到新列表中。

一般来说,如果需要连接两个列表,使用+运算符可能更方便。但是,如果您是从头开始构建列表,则使用 append 方法可以提高性能,尤其是在处理大型列表时。


0
投票

list1 + list2
创建一个相当慢的新列表。像
list1.append(value)
这样的就地操作应该更快,但是如果您在循环中使用它,迭代调整大小可能会使它变得不那么快。您可以使用
list1.extend(list2)
直接将列表直接添加到另一个列表。

List 实际上相当慢。即使在 Numba 中(AFAIK 由于正在生成检查指令和多次调整大小+副本)。如果您知道列表大小是有界的,那么您可以使用具有最大可能大小的数组(只要它是合理的)并制作副本或只返回目标数组的视图。在主流平台上,在虚拟内存中分配数据并不直接映射到物理内存上。这意味着一个大的分配数组在物理内存中(几乎)不占用空间,并且页面仅在您写入时分配(页面的大小取决于平台,但它们可能非常大)。这个技巧可用于强烈优化边界相对较大的代码,但您应该避免在边界很大的情况下使用它,因为操作系统可以自由地不接受虚拟内存分配(例如,在病态情况下,例如当没有太多内存时)并且没有交换)。

© www.soinside.com 2019 - 2024. All rights reserved.