Julia 获取包含所有给定元素组合的数组的最优雅方法
当前获取列名包含所有给定元素组合的数组的最优雅方法是什么?与R中的函数Julia 获取包含所有给定元素组合的数组的最优雅方法,julia,combinations,Julia,Combinations,当前获取列名包含所有给定元素组合的数组的最优雅方法是什么?与R中的函数expand.grid()最接近的类似函数。我在这个问题上遇到的所有讨论都是关于这个问题的一个稍微不同的公式,或者是在Julia非常旧的版本中进行的。我目前找到的最合理的解决方案如下: using DataFrames xy = [[x,y] for x in 0:0.25:1 for y in 0:0.25:1] xy_array = permutedims(reshape(hcat(xy...), (length(xy[1
expand.grid()
最接近的类似函数。我在这个问题上遇到的所有讨论都是关于这个问题的一个稍微不同的公式,或者是在Julia非常旧的版本中进行的。我目前找到的最合理的解决方案如下:
using DataFrames
xy = [[x,y] for x in 0:0.25:1 for y in 0:0.25:1]
xy_array = permutedims(reshape(hcat(xy...), (length(xy[1]), length(xy))))
df = DataFrame(x = xy_array[:,1], y = xy_array[:,2])
julia> DataFrame((x=x,y=y) for x in 0:0.25:1 for y in 0:0.25:1)
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.0 0.25
3 │ 0.0 0.5
⋮ │ ⋮ ⋮
23 │ 1.0 0.5
24 │ 1.0 0.75
25 │ 1.0 1.0
19 rows omitted
R中的类似表达式可以写得更简洁:
xy_comb <- expand.grid(x=seq(0, 1, 0.25), y=seq(0, 1, 0.25))
xy_comb让我展示几个选项,这些选项还将展示DataFrames.jl与Tables.jl的集成,以及在这种情况下如何使用它
您可以这样做,例如:
julia> df = DataFrame(x=Float64[], y=Float64[])
0×2 DataFrame
julia> foreach(x -> push!(df, x), Iterators.product(0:0.25:1, 0:0.25:1))
julia> df
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.25 0.0
3 │ 0.5 0.0
⋮ │ ⋮ ⋮
23 │ 0.5 1.0
24 │ 0.75 1.0
25 │ 1.0 1.0
19 rows omitted
或者这样(这会更快,但在动态生成数据帧行的一般情况下,前一种模式很有用):
DataFrame(Iterators.product(0:0.25:1,0:0.25:1))
的问题在于默认列名是“1”
和“2”
,您可能需要更改它们
因此,您还可以生成NamedTuples
而不是Tuples
,如下所示:
using DataFrames
xy = [[x,y] for x in 0:0.25:1 for y in 0:0.25:1]
xy_array = permutedims(reshape(hcat(xy...), (length(xy[1]), length(xy))))
df = DataFrame(x = xy_array[:,1], y = xy_array[:,2])
julia> DataFrame((x=x,y=y) for x in 0:0.25:1 for y in 0:0.25:1)
25×2 DataFrame
Row │ x y
│ Float64 Float64
─────┼──────────────────
1 │ 0.0 0.0
2 │ 0.0 0.25
3 │ 0.0 0.5
⋮ │ ⋮ ⋮
23 │ 1.0 0.5
24 │ 1.0 0.75
25 │ 1.0 1.0
19 rows omitted
具有不同的行顺序