gpt4 book ai didi

julia - 如何在 Julia 中有效地初始化巨大的稀疏数组?

转载 作者:行者123 更新时间:2023-12-04 15:17:11 26 4
gpt4 key购买 nike

有两种方法可以初始化 NXN 稀疏矩阵,其条目将从一个/多个文本文件中读取。 哪个更快? 我需要更高效的一个,因为 N 很大,通常是 10^6。

1)。我可以将 (x,y) 索引存储在数组 x、y、数组 v 中的条目中并声明
K = sparse(x,y,value);
2)。我可以声明K = spzeros(N)
然后读取 (i,j) 坐标和值 v 并将它们插入为K[i,j]=v;
因为他们正在阅读。
我在 Julia 的稀疏数组页面上没有找到有关此的提示。

最佳答案

不要一个一个地插入值:这将是非常低效的,因为稀疏矩阵中的存储需要一遍又一遍地重新分配。

您还可以使用 BenchmarkTools.jl 来验证这一点:

julia> using SparseArrays

julia> using BenchmarkTools

julia> I = rand(1:1000, 1000); J = rand(1:1000, 1000); X = rand(1000);

julia> function fill_spzeros(I, J, X)
x = spzeros(1000, 1000)
@assert axes(I) == axes(J) == axes(X)
@inbounds for i in eachindex(I)
x[I[i], J[i]] = X[i]
end
x
end
fill_spzeros (generic function with 1 method)

julia> @btime sparse($I, $J, $X);
10.713 μs (12 allocations: 55.80 KiB)

julia> @btime fill_spzeros($I, $J, $X);
96.068 μs (22 allocations: 40.83 KiB)

原帖可见 here

关于julia - 如何在 Julia 中有效地初始化巨大的稀疏数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57950114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com