如何在julia中生成规则的非整数序列?
如何在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} (
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-我在下面添加了另一个答案。