Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia中的(x:y)运算符_Julia_Ijulia Notebook - Fatal编程技术网

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
在添加到Float64
4/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