Julia中的(x:y)运算符
我试图理解以下代码:Julia中的(x:y)运算符,julia,ijulia-notebook,Julia,Ijulia Notebook,我试图理解以下代码: r = (1:10) - (4/1) println(r) 输出: -3.0:1.0:6.0 我明白为什么我得到了-3和6。但是为什么我在中间得到了这个值(1)< /强>?朱莉娅是怎么计算的?或者我如何用谷歌搜索它?(第一步:最后一步)语法表示一个范围类型 typeof(1:10) # => UnitRange{Int32} 如果省略了步骤部分,默认情况下假定为1 1:10 == 1:1:10 # => true 范围是系列的紧凑视图 coll
r = (1:10) - (4/1)
println(r)
输出:
-3.0:1.0:6.0
我明白为什么我得到了-3
和6
。但是为什么我在中间得到了这个值<强>(1)< /强>?朱莉娅是怎么计算的?或者我如何用谷歌搜索它?(第一步:最后一步)
语法表示一个范围
类型
typeof(1:10) # => UnitRange{Int32}
如果省略了步骤部分,默认情况下假定为1
1:10 == 1:1:10 # => true
范围是系列的紧凑视图
collect(1:10) # => 10-element Array{Int32,1}:
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
因此,预计范围
类型和向量
遵循相同的规则,例如,当您添加如下常量值时:
collect(1+(1:10))==collect(1:10)+1 # => true
collect((1:10)+(1:10))==collect(1:10)+collect(1:10) # => true
或者,即使添加两个向量,也会得到添加其范围表示的相同结果,如下所示:
collect(1+(1:10))==collect(1:10)+1 # => true
collect((1:10)+(1:10))==collect(1:10)+collect(1:10) # => true
4/1
中的除法运算符返回一个Float64
。虽然原始范围是大小为1的Int
步长范围,但在两侧添加浮点后,它将成为Float64
范围。因此,1.0的步长是通过转换隐式整数步长来创建的(浮点数是非均匀分布的,因此均匀步长有点棘手-有时会出现舍入问题)。将浮点值
应用于间隔时,可以看到这一点:
julia> 1:10
1:10
julia> float(1:10)
1.0:1.0:10.0
在添加到Float644/1
(4.0
)之前,需要进行此升级
类似地,将整数添加到浮点时,julia在添加/减去之前将整数“提升”为浮点:
julia> 1 + 2.0
3.0
julia> @which 1 + 2.0
+(x::Number, y::Number) at promotion.jl:172
见:
您可以@一直跟踪函数调用以了解发生了什么(一直到):
这可能只是一个输入错误,但不是说1:10==1:1:10
,而是说1:10==1:1:10
。第一个是UnitRange
,第二个是StepRange
。还可以提到isa(1:10,AbstractVector)#=>true
。感谢@Andreas对1:10!==1:1:10
真的是打字错误,我编辑了它。现在1:10==1:1:10
julia> float(1:10)
10-element FloatRange{Float64}:
1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0
julia> 1:10
10-element UnitRange{Int64}:
1,2,3,4,5,6,7,8,9,10