在 Julia 中连接数组的高效/廉价方法?

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

在 Julia 中,我想连接多个数组(也可以将它们相乘)。在我的程序中,我将其编写如下:

[Uᵣ Qₐ]*Uₖ
[Vᵣ Qᵦ]*Vₖ

但是,与我编写的程序的其余部分相比,这个数组串联“非常昂贵”。除了我所做的(或仅使用 hcat、vcat 函数)之外,Julia 中还有什么方法可以廉价/高效地连接数组

matrix julia linear-algebra numerical-methods
1个回答
6
投票

但是,如果矩阵足够大,您可以避免通过

using BlockArrays

复制数据。组合矩阵的非具体化函数称为

mortar
看一下这段代码:

using BlockArrays, BenchmarkTools a = rand(1000,100) b = rand(1000,120) z = rand(220,7)

现在让我们运行基准测试:

julia> @btime [$a $b]*$z; 1.234 ms (4 allocations: 1.73 MiB) julia> @btime mortar(($a, $b)) * $z; 573.100 μs (11 allocations: 55.33 KiB) julia> all([a b]*z .≈ mortar((a, b)) * z) true

您可以看到加速比为 2 倍,内存分配差异为 30 倍。然而,结果会根据矩阵的大小和形状而有所不同,因此您应该运行自己的基准测试。

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