Mic*_*gge 6 sparse-matrix julia
Julia中的分段/非连续范围是否有任何类型的对象类?例如,我可以创建一个常规范围:
a = UnitRange(1:5)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想将其与其他范围结合起来:
b = UnitRange([1:5, 8:10, 4:7])
Run Code Online (Sandbox Code Playgroud)
我目前无法找到对象或方法.在这种情况下,有一个PiecewiseIncreasingRanges模块(https://github.com/simonster/PiecewiseIncreasingRanges.jl)正是我想要的,除了它,顾名思义,要求范围单调递增.
对此的上下文是我正在寻找一种方法来为具有重复行的稀疏矩阵创建SparseMatrixCSC类型的压缩,内存有效版本.RLEVectors模块可以很好地节省稀疏矩阵类中非零值向量的空间.现在虽然我试图找到一些东西来为行值矢量节省空间,同时也定义了稀疏矩阵,因为一系列重复行将导致该向量中的值范围(例如,前10行,甚至是某些列中的某些列)稀疏矩阵的前十行是相同的,那么行值向量中将存在大量的1:10模式.
更一般地说,我想要一个范围,比如我尝试在上面创建的b对象,我可以做一个迭代循环,得到:
for (idx, item) in enumerate(hypothetical_object)
println("idx: $idx, item: $item")
end
idx: 1, item: 1
idx: 2, item: 2
...
idx: 5, item: 5
idx: 6, item: 8
idx: 7, item: 9
idx: 8, item: 10
idx: 9, item: 4
idx: 10, item: 5
...
Run Code Online (Sandbox Code Playgroud)
更新:我正在考虑的一件事,如果我在这里没有听到其他建议,可能会尝试实现,只是创建一个PiecewiseIncreasingRange对象数组,一个用于稀疏矩阵中的每一列.(然后我可能还会将非零值向量分解为一个单独的片段数组,对于我的稀疏矩阵的每一列也是如此).这至少可以相对简单地实现.我不清楚这在计算效率方面与我在这个问题中寻找的对象类型之间的比较.我怀疑内存要求大致相同.
要循环范围序列(或其他迭代器),您可以使用Iterators.jlchain包中的函数。
例如:
using Iterators
b = chain(1:5, 8:10, 4:7)
for i in b
println(i)
end
输出每个范围的元素。
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |