在Julia语言中理解步骤不能是零错误?

在Julia语言中理解步骤不能是零错误?,julia,Julia,我需要一个单位范围向量,如下所示: [2:5,3:6,4:7,5:8] 当我尝试运行这个(2:5):(5:8)时,我得到一个错误“ArgumentError:step不能为零” 有没有一种方法可以使用UnitRange本身创建UnitRange数组?听起来您想在两个参数中的元素上映射或广播:。只需明确地做到: julia> map(:, 2:5, 5:8) 4-element Array{UnitRange{Int64},1}: 2:5 3:6 4:7 5:8 现在,理想情况下,

我需要一个单位范围向量,如下所示: [2:5,3:6,4:7,5:8]

当我尝试运行这个(2:5):(5:8)时,我得到一个错误“ArgumentError:step不能为零”


有没有一种方法可以使用UnitRange本身创建UnitRange数组?

听起来您想在两个参数中的元素上映射或广播
。只需明确地做到:

julia> map(:, 2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8
现在,理想情况下,您也可以将其编写为
(2:5)。:(5:8)
-您可以为
操作符添加点以进行广播-但是由于
用于很多事情,并且由于这不是一个非常常见的用例,我们没有启用
的点。但是,您可以使用非中缀形式和点:

julia> (:).(2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8
至于您收到的错误消息,这是因为
尝试做的第一件事是确定长度,假设它的两个参数是标量。为此,从第二个参数中减去第一个参数:

julia> (5:8) - (2:5)
ERROR: ArgumentError: step cannot be zero

这失败了,因为它试图创建一个有效的步长范围
3:0:3
,长度为4。

听起来像是要在两个参数中的元素上映射或广播
。只需明确地做到:

julia> map(:, 2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8
现在,理想情况下,您也可以将其编写为
(2:5)。:(5:8)
-您可以为
操作符添加点以进行广播-但是由于
用于很多事情,并且由于这不是一个非常常见的用例,我们没有启用
的点。但是,您可以使用非中缀形式和点:

julia> (:).(2:5, 5:8)
4-element Array{UnitRange{Int64},1}:
 2:5
 3:6
 4:7
 5:8
至于您收到的错误消息,这是因为
尝试做的第一件事是确定长度,假设它的两个参数是标量。为此,从第二个参数中减去第一个参数:

julia> (5:8) - (2:5)
ERROR: ArgumentError: step cannot be zero

这失败了,因为它试图创建一个有效的步长范围
3:0:3
,长度为4。

但我认为海报想要的更多:不是
Vector{UnitRange}
而是
UnitRange{UnitRange}
…嗨,我需要UnitRange{UnitRange}。我将使用UnitRange数组来广播矩阵中的行。我试图通过使用这个来减少for循环的数量。但是为什么呢?Julia的
for
循环速度快,无需避免。一个
向量{UnitRange}
将像你假设的
UnitRange{UnitRange}
一样工作。是的,但它会分配更多。这就是射程的目的,对吗?一种轻量级、懒惰、聪明的数组类型,几乎不使用内存。它将只存储每个范围的端点。令人惊讶的是,这确实适用于
StepRangeLen
s,它可以支持0步范围
StepRangeLen(2:5,StepRangeLen(1,0,4),5)
。但我认为海报想要的更多:不是
Vector{UnitRange}
,而是
UnitRange{UnitRange}
…嗨,我需要UnitRange{UnitRange}。我将使用UnitRange数组来广播矩阵中的行。我试图通过使用这个来减少for循环的数量。但是为什么呢?Julia的
for
循环速度快,无需避免。一个
向量{UnitRange}
将像你假设的
UnitRange{UnitRange}
一样工作。是的,但它会分配更多。这就是射程的目的,对吗?一种轻量级、懒惰、聪明的数组类型,几乎不使用内存。它将只存储每个范围的端点。令人惊讶的是,这确实适用于
StepRangeLen
s,它可以支持0步范围<代码>步距(2:5,步距(1,0,4),5)。