在Julia语言中理解步骤不能是零错误?
我需要一个单位范围向量,如下所示: [2:5,3:6,4:7,5:8] 当我尝试运行这个(2:5):(5:8)时,我得到一个错误“ArgumentError:step不能为零”在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 现在,理想情况下,
有没有一种方法可以使用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)。