首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您如何使用SparseArrays.sparse?

您如何使用SparseArrays.sparse?
EN

Stack Overflow用户
提问于 2022-12-01 04:34:50
回答 1查看 38关注 0票数 2

我读过这个post,我也有一个类似的问题。我想多次就地更新稀疏矩阵,在我看来,SparseArrays.sparse!是我最好的选择。但是,我不太理解文档,它说我可以打电话给

代码语言:javascript
复制
sparse!(I, J, V, csrrowptr, csrcolval, csrnzval, I, J, V)

我的问题是:

第一组I, J, V

  • What是第二组I, J, V

  • Suppose,我已经创建了一个矩阵A = sparse(I,J,V),我想就地更新A。如何获得sparse!

?默认情况下,A有CSC格式,而不是CSR。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-12-01 08:11:27

在查看了文档之后,它肯定感觉到(而且是) SparseArrays的包内部功能。在任何情况下,根据你的问题(不按顺序):

Q4 (最简单的)在REPL中执行@edit sparse([1,2,3],[1,2,3],[5,6,7]),并在编辑的文件中搜索sparse!,这将显示sparse如何在内部使用sparse!

Q1第一个I, J, V是输入,给出了通常的列索引、行索引和值。注意,这些不是结果矩阵的内部CSC存储向量。

Q2第二个I, J, V是作为内部CSC存储向量的稀疏矩阵中使用的数组。由于在sparse!调用后不需要输入,所以可以重复使用输入向量和分配内部CSC向量( I, J, K以外的其他向量可以作为输出传递,特别是当输入向量内存太少而无法容纳CSC表示时)。

Q3获取sparse!内部创建的CSR表示很容易--它们位于作为csrrowptr, csrcolval, csrnzval传递的向量中。向量需要有足够的内存,并由sparse!填充。

sparse!的全部目的是不进行任何分配/释放。内存管理由“父”接口完成(本例中为sparse)。这允许在内存已经分配或从另一个变量中回收时直接不分配处理。

这需要一些修改,但下面是sparse!使用的演示:

代码语言:javascript
复制
julia> I = sizehint!([1,2,3,1], 5)
4-element Vector{Int64}:
 1
 2
 3
 1

julia> J = sizehint!([3, 2, 1, 2], 5)
4-element Vector{Int64}:
 3
 2
 1
 2

julia> V = sizehint!([6,7,8,9],5)
4-element Vector{Int64}:
 6
 7
 8
 9

现在为sparse!设置工作内存

代码语言:javascript
复制
julia> my_klasttouch = Vector{Int}(undef, 10);

julia> my_csrrowptr = Vector{Int}(undef, 10);

julia> my_csrcolval = Vector{Int}(undef, 10);

julia> my_csrnzval = Vector{Int}(undef, 10);

最后:

代码语言:javascript
复制
julia> M = SparseArrays.sparse!(
  I, J, V, 3, 3, +, 
  my_klasttouch, my_csrrowptr, my_csrcolval, my_csrnzval, 
  I, J, V
)
3×3 SparseMatrixCSC{Int64, Int64} with 4 stored entries:
 ⋅  9  6
 ⋅  7  ⋅
 8  ⋅  ⋅

要查看输入内存如何成为返回对象的一部分:

代码语言:javascript
复制
julia> M.colptr   # this is from returned object
4-element Vector{Int64}:
 1
 2
 4
 5

julia> I
4-element Vector{Int64}:
 1
 2
 4
 5

注意,IM.colpotr使用相同的内存。

鉴于以上所述,在使用此函数之前,我建议仔细检查实现代码并仔细理解算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74636966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档