gpt4 book ai didi

julia - 分段/非连续范围?

转载 作者:行者123 更新时间:2023-12-04 15:42:07 30 4
gpt4 key购买 nike

Julia中是否有任何类型的分段/非连续范围的对象类?例如,我可以创建一个常规范围:

a = UnitRange(1:5)

但是,如果我想将此与其他范围相结合:
b = UnitRange([1:5, 8:10, 4:7])

我目前找不到对象或方法。有一个 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
...

更新:我正在考虑的一件事,如果我在这里没有听到其他建议,可能会尝试实现,将只是创建一个 PiecewiseIncreasingRange 对象数组,一个用于我的稀疏矩阵中的每一列。 (然后我可能还会将非零值向量分解为一个单独的片段数组,我的稀疏矩阵的每一列也有一个片段)。这至少实现起来相对简单。我没有很好的感觉,这将如何在计算效率方面与我在这个问题中搜索的对象进行比较。我怀疑内存要求大致相同。

最佳答案

要遍历一系列范围(或其他迭代器),可以使用 chain Iterators.jl 中的函数包裹。

例如:
using Iterators
b = chain(1:5, 8:10, 4:7)
for i in b
println(i)
end
输出每个范围的元素。

关于julia - 分段/非连续范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35110277/

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