におけるオペレータ私はこのコードを理解しようとしています:(X:Y)、ジュリア
r = (1:10) - (4/1)
println(r)
出力:
-3.0:1.0:6.0
をなぜ私が理解-3
と6
があります。しかし、なぜ私はその価値が中間にあるのですか(1.0)?ジュリアはどのようにそれを計算しますか?または私はそれをGoogleにすることができますか?段差部を省略した場合
におけるオペレータ私はこのコードを理解しようとしています:(X:Y)、ジュリア
r = (1:10) - (4/1)
println(r)
出力:
-3.0:1.0:6.0
をなぜ私が理解-3
と6
があります。しかし、なぜ私はその価値が中間にあるのですか(1.0)?ジュリアはどのようにそれを計算しますか?または私はそれをGoogleにすることができますか?段差部を省略した場合
(first:step:last)
構文は、デフォルトでは1
1:10 == 1:1:10 # => true
Range
は一連のコンパクト図であるものとする、ジュリア
typeof(1:10) # => UnitRange{Int32}
にRange
タイプを表す
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
、あるいは二つのベクトルを追加するあなたにこのような彼らの範囲の表現を追加するのと同じ結果を与える:Range
タイプとあなたがこのような一定の値を追加するときVector
が同じ規則等に従うが、その編
collect((1:10)+(1:10))==collect(1:10)+collect(1:10) # => true
除算演算子4/1
は、Float64
を返します。元のRangeはサイズ範囲が1 Int
の範囲ですが、両側に浮動小数点を追加した後はFloat64
の範囲になります。したがって、1.0のステップサイズは、暗黙の整数ステップサイズを変換することによって作成されます(浮動小数点数は不均一であるため、一様なステッピングは少しトリッキーですが、丸めの問題があることもあります)。
間隔にfloat
を適用するときは、これを見ることができます:
julia> 1:10
1:10
julia> float(1:10)
1.0:1.0:10.0
と、このプロモーションはのfloat64 4/1
(4.0
)に添加する前に必要とされます。
julia> 1 + 2.0
3.0
julia> @which 1 + 2.0
+(x::Number, y::Number) at promotion.jl:172
+(x::Number, y::Number) = +(promote(x,y)...)
あなたは@which
関数に従うことができるフロートジュリアの整数を追加する場合も同様
は、減算/加算する前に、浮動小数点の整数を「促進します」何が起こっているのかを理解するために電話をかけます(the followingまで):
julia> @which +(1:10, 2.0)
+(A::AbstractArray{T,N}, x::Number) at arraymath.jl
julia> @which .+(1:10, 2.0)
.+(r::Range{T}, x::Real) at range.jl
julia> @which .+(2.0, 1:10)
.+(x::Real, r::UnitRange{T<:Real}) at range.jl
# which is defined as
.+(x::Real, r::UnitRange) = range(x + r.start, length(r))
、したがって、Int64とFloat64のプロモーション追加。あいまいな間隔の表示がわずかに少ない混乱してマスターに
注/:
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
良い説明、ありがとう! –
これはおそらくタイプミスですが、 '1:10 === 1:1:10'、それは' 1:10 == 1:1:10'だけではありません。 1つは 'UnitRange'で、2つ目は' StepRange'です。 'isa(1:10、AbstractVector)#=> true'と言えばいいかもしれません。 –
「1:10!== 1:1:10」の彼のコメントのおかげで@Andreas本当にそれはタイプミスでした、私はそれを編集します。今すぐ '1:10 == 1:1:10#=> true' –