如何在julia中生成常规的非整数序列?
我正试图获得0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
在MATLAB中,我会使用
0.1:0.1:1
在R
seq(0.1, 1, by = 0.1)
但是除了julia中的整数序列之外我找不到任何东西(例如,1:10
)。在文档中搜索“序列”只能提供有关字符串序列的信息。
答案 0 :(得分:14)
与Matlab类似,但差异在于0.1:0.1:1
定义了Range
:
julia> typeof(0.1:0.1:1)
Range{Float64} (constructor with 3 methods)
因此如果需要Array
:
julia> [0.1:0.1:1]
10-element Array{Float64,1}:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
不幸的是,Range
的使用只是简要提及at this point of the documentation。
编辑如@ivarne的评论所述,使用linspace可以获得类似的结果:
julia> linspace(.1,1,10)
10-element Array{Float64,1}:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
但请注意,由于四舍五入的差异,结果并不完全相同:
julia> linspace(.1,1,10)==[0.1:0.1:1]
false
答案 1 :(得分:4)
现在已弃用原始答案。您应该使用collect()
生成序列。
## In Julia
> collect(0:.1:1)
10-element Array{Float64,1}:
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
## In R
> seq(0, 1, .1)
[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
答案 2 :(得分:0)
它们的生成方式与Matlab中相同
julia> sequence = 0:.1:1
0.0:0.1:1.0
或者,您可以使用the range()
function,它允许您指定长度,步长或同时指定两者
julia> range(0, 1, length = 5)
0.0:0.25:1.0
julia> range(0, 1, step = .01)
0.0:0.01:1.0
julia> range(0, step = .01, length = 5)
0.0:0.01:0.04
您仍然可以使用向量通常可以进行的所有想法,例如索引
julia> sequence[4]
0.3
数学和统计信息...
julia> sum(sequence)
5.5
julia> using Statistics
julia> mean(sequence)
0.5
(大多数情况下),它的工作方式与矢量相同,但是实际上没有分配任何东西。制作矢量可能很舒适,但是在大多数情况下,您不应该这样做(性能较差)。之所以可行,是因为
julia> sequence isa AbstractArray
true
如果您确实需要向量,则可以collect()
,splat(...
)或使用理解:
julia> v = collect(sequence)
11-element Array{Float64,1}:
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
julia> v == [sequence...] == [x for x in sequence]
true