Julia 范围的包容性
Inclusivity of Julia ranges
我讨厌范围包括结尾。这是我故意删除范围末尾的示例。
N = 100
for x in 0.0 : 2*pi/N : 2*pi*(N-1)/N
println(x)
end
有什么办法可以避免这种for循环的丑陋吗?
也许不是最优雅的方式...取前n-1个元素
r = 0.0 : 2*pi/N : 2*pi
r = Iterators.take(r,length(r)-1)
不幸的是,包含范围(和基于 1 的索引)在基本层面上融入了 Julia 的习语。
但是,对于这种特定情况,请注意使用浮点值步进可能会出现问题,因为添加 N 个值可能小于、等于或大于最终值,从而为 for 循环提供不同的结果.尽管 julia tries really hard,但没有办法在所有情况下都做正确的事。作为奖励,仅在范围内使用整数值可以简化事情。您可能需要考虑:
for ix in 0:N-1
x = ix * 2 * pi / N
println(x)
end
或者,range()
函数有一个带有 len
参数的形式:
for x in range(0, 2*pi*(N-1)/N, length=n)
println(x)
end
或者实际上,将此与仅取 (N-1) 的另一个答案结合起来可能会奏效。
您实际上可以定义自己的运算符,例如:
▷(a,b) = a:b-1
现在你可以写:
julia> 3▷6
3:5
Julia 还原生支持数组的自定义索引。有一个软件包 CustomUnitRanges
在这里可能有点矫枉过正。
有,有
N = 100
for x in range(0; step=2π/N, length=N)
println(x)
end
我讨厌范围包括结尾。这是我故意删除范围末尾的示例。
N = 100
for x in 0.0 : 2*pi/N : 2*pi*(N-1)/N
println(x)
end
有什么办法可以避免这种for循环的丑陋吗?
也许不是最优雅的方式...取前n-1个元素
r = 0.0 : 2*pi/N : 2*pi
r = Iterators.take(r,length(r)-1)
不幸的是,包含范围(和基于 1 的索引)在基本层面上融入了 Julia 的习语。
但是,对于这种特定情况,请注意使用浮点值步进可能会出现问题,因为添加 N 个值可能小于、等于或大于最终值,从而为 for 循环提供不同的结果.尽管 julia tries really hard,但没有办法在所有情况下都做正确的事。作为奖励,仅在范围内使用整数值可以简化事情。您可能需要考虑:
for ix in 0:N-1
x = ix * 2 * pi / N
println(x)
end
或者,range()
函数有一个带有 len
参数的形式:
for x in range(0, 2*pi*(N-1)/N, length=n)
println(x)
end
或者实际上,将此与仅取 (N-1) 的另一个答案结合起来可能会奏效。
您实际上可以定义自己的运算符,例如:
▷(a,b) = a:b-1
现在你可以写:
julia> 3▷6
3:5
Julia 还原生支持数组的自定义索引。有一个软件包 CustomUnitRanges
在这里可能有点矫枉过正。
有,有
N = 100
for x in range(0; step=2π/N, length=N)
println(x)
end