如何在julia中生成常规的非整数序列?

时间:2014-02-17 23:21:37

标签: julia

如何在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)。在文档中搜索“序列”只能提供有关字符串序列的信息。

3 个答案:

答案 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