Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 分段/非连续范围?_Julia_Sparse Matrix - Fatal编程技术网

Julia 分段/非连续范围?

Julia 分段/非连续范围?,julia,sparse-matrix,Julia,Sparse Matrix,Julia中是否存在分段/非连续范围的对象类?例如,我可以创建一个常规范围: a = UnitRange(1:5) 但是,如果我想将其与其他范围相结合: b = UnitRange([1:5, 8:10, 4:7]) 我当前找不到对象或方法。这里有一个分段递增的ranges模块(),这正是我在这种情况下想要的,只是它,顾名思义,要求范围单调递增 本文的背景是,我正在寻找一种方法,为具有重复行的稀疏矩阵创建SparSematrix xCSC类型的压缩、内存高效版本。RLEVectors模块可以

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

a = UnitRange(1:5)
但是,如果我想将其与其他范围相结合:

b = UnitRange([1:5, 8:10, 4:7])
我当前找不到对象或方法。这里有一个分段递增的ranges模块(),这正是我在这种情况下想要的,只是它,顾名思义,要求范围单调递增

本文的背景是,我正在寻找一种方法,为具有重复行的稀疏矩阵创建SparSematrix xCSC类型的压缩、内存高效版本。RLEVectors模块可以很好地节省稀疏矩阵类中非零值向量的空间。现在,尽管我试图为rowvalue向量(它也定义了稀疏矩阵)找到一些节省空间的方法,因为一系列重复的行将导致该向量中的值的范围(例如,如果稀疏矩阵的前10行,甚至前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
...

更新:我正在考虑的一件事,如果我没有听到其他建议,可能会尝试实现,就是创建一个逐段递增的范围对象数组,在稀疏矩阵中每列一个。(我可能还会将非零值向量分解为一个单独的片段数组,稀疏矩阵的每一列也有一个片段)。这至少是相对简单的实现。我不太清楚这在计算效率方面与我在这个问题中搜索的对象类型相比如何。我怀疑内存需求大致相同。

在一系列范围(或其他迭代器)上循环,您可以使用软件包中的
功能

例如:

使用迭代器
b=链(1:5,8:10,4:7)
因为我在b
println(i)
结束

输出每个范围的元素。

听起来像是一个可以添加到Julia的新的
类型。
可能的名称:
CompressedSet
RangeSet
。也许其他评论者会有更好的名称。就你的初始问题而言,你不能使用范围数组吗?@rcpinto我不确定。问题是我想能够通过查找方法像普通范围一样查询此对象。例如,对于常规范围,我可以输入(20:40)[5]返回24,这是我想要的,也是我在上面的循环图中试图描述的功能。但是,对于一个范围数组,我至少看不到一个明显的方法来获得它。例如,使用数组本身的查找,只会给我一个特定的范围。一种可能是定义一个新的方法f或者这样的数组。但是你看到更直接的方法了吗?Nvm,我所说的范围数组实际上是一个Int数组,因为范围在这个过程中被转换。我可以做idx=[1:5;8:10;4:7]和idx[7]将给我9,但idx存储所有索引,我认为您不希望这样。这看起来肯定像是您必须创建自己的类型的情况。幸运的是,您可以使用分段递增范围的代码作为模型。