首页 > 解决方案 > 在 Julia 语言中理解步骤不能是零错误?

问题描述

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

当我尝试运行此 (2:5):(5:8) 时,我收到“ArgumentError:步不能为零”的错误。

有没有办法使用 UnitRange 本身创建一个 UnitRange 数组?

标签: julia

解决方案


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

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 的步进范围。


推荐阅读