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

如何在julia中生成规则的非整数序列?,julia,Julia,如何在julia中生成规则的非整数序列 我正在尝试获取0.10.20.30.40.50.60.70.80.91.0 在MATLAB中,我将使用 0.1:0.1:1 在R seq(0.1, 1, by = 0.1) 但是我在julia中除了整数序列之外什么都找不到(例如,1:10)。在文档中搜索“序列”只会提供有关字符串是如何序列的信息。类似于Matlab,但不同之处在于0.1:0.1:1定义了一个范围: julia> typeof(0.1:0.1:1) Range{Float64} (

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

我正在尝试获取
0.10.20.30.40.50.60.70.80.91.0

在MATLAB中,我将使用

0.1:0.1:1
在R

seq(0.1, 1, by = 0.1)

但是我在julia中除了整数序列之外什么都找不到(例如,
1:10
)。在文档中搜索“序列”只会提供有关字符串是如何序列的信息。

类似于Matlab,但不同之处在于
0.1:0.1:1
定义了一个
范围

julia> typeof(0.1:0.1:1)
Range{Float64} (constructor with 3 methods)
因此,如果需要
数组

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
的这种用法仅作简要介绍

编辑:如@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

原来的答案现在已被弃用。您应该使用
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

它们的生成方式与Matlab中的相同

julia> sequence = 0:.1:1
0.0:0.1:1.0
或者,您可以使用,它允许您指定长度和/或步长

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

还有linspace函数。那么使用linspace还是collect更好?collect(0.1:1)和range(1,length=10,step=0.1)之间有什么区别?据我所知,range仍然不会生成序列。。您需要将collect()包装在itI不同意的范围内。正确的答案是只使用
0:0.1:1
。除非在非常特殊的情况下,否则您不需要
收集
。绝对同意@DNF-我在下面添加了另一个答案。