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

洛根基帕特里克

有两种方法可以初始化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)

原始帖子可以在这里找到

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中有效地使用常量值初始化数组

如何在 v8 中有效地实例化 JavaScript 数组文字?

如何在Python中有效地计算巨大的矩阵乘法(tfidf功能)?

有效地初始化Cython Memoryview

更加有效地初始化数组保持结构

有效地初始化多个numpy数组

如何使用EF Code First有效地初始化大种子?

如何在Python中有效地匹配两个数组值?

是否可以有效地使用非零值初始化字节数组?

如何有效地组装FEM稀疏矩阵

Dart:如何有效地初始化依赖于同一计算的多个final字段?

如何使用csv文件有效地在iOS / Core Data应用程序中初始化数据?

有效地根据属性B和C初始化属性A

如何在python 3中有效地将原始字节写入numpy数组数据

如何在C ++中有效地将数字值重新分配给字符数组

如何在REST序列化程序中有效地访问数据库以获取相关字段?

如何在Python中有效地从一个巨大的块中提取具有偏移量的字节?

如何在 Matlab 中有效地计算单个有限差分?

如何在R中有效地附加列表的所有元素

如何在R中有效地联接具有多个主键的表?

如何在带有短句的大型数据集中有效地使用spacy?

在朱莉娅的稀疏矩阵中有效地插入对角线

在熊猫中有效地创建稀疏数据透视表?

在Python中有效地从稀疏矩阵的列中减去均值

在Python中有效地对稀疏矩阵进行分组

如何在Rails中有效地对模型进行评分并获取其平均评分

如何在Ruby中有效地连接多个阵列?

如何在Java中有效地合并两个列表?

如何在Java中有效地洗牌2D名单?