什么是最有效的:对 ArrayBase 或 ArrayView 的引用?
What's the most efficient: a reference to an ArrayBase or an ArrayView?
我正在改进使用 ndarray
箱来操作数组的 Rust 代码库。我有一个问题,我在文档中找不到明确的答案。
将 ArrayView
的实例作为参数传递给函数是否更有效,还是我应该使用对 Array
的引用?我的直觉是,由于 ArrayView
是数组的视图,因此在进行计算时,它仅传递数组的视图并且不向函数授予所有权(因此不复制)底层数据。
简而言之,从传递 ArrayView
的实例切换到传递 Array
的引用是否有任何速度提升?
我的目标是避免无用的内存allocation/duplication,这在处理大型数组时可能会非常昂贵。
ArrayBase
是一个通用结构,可以充当 ArrayView
和 Array
,所以我假设您指的是对拥有数据的引用,即 Array
.
这两个版本都不会克隆数组,因此它们的效率应该大致相同。您可以随时进行基准测试来验证这一点。
在我看来,区别主要在于 ArrayView
会使函数更加灵活——您可以传入较大数组的一部分,或者从切片创建的 ArrayView
,而只有当您确实拥有所需大小的 Array
时,才能调用引用 Array
的变体。
我正在改进使用 ndarray
箱来操作数组的 Rust 代码库。我有一个问题,我在文档中找不到明确的答案。
将 ArrayView
的实例作为参数传递给函数是否更有效,还是我应该使用对 Array
的引用?我的直觉是,由于 ArrayView
是数组的视图,因此在进行计算时,它仅传递数组的视图并且不向函数授予所有权(因此不复制)底层数据。
简而言之,从传递 ArrayView
的实例切换到传递 Array
的引用是否有任何速度提升?
我的目标是避免无用的内存allocation/duplication,这在处理大型数组时可能会非常昂贵。
ArrayBase
是一个通用结构,可以充当 ArrayView
和 Array
,所以我假设您指的是对拥有数据的引用,即 Array
.
这两个版本都不会克隆数组,因此它们的效率应该大致相同。您可以随时进行基准测试来验证这一点。
在我看来,区别主要在于 ArrayView
会使函数更加灵活——您可以传入较大数组的一部分,或者从切片创建的 ArrayView
,而只有当您确实拥有所需大小的 Array
时,才能调用引用 Array
的变体。