gpt4 book ai didi

julia - 获取包含给定元素的所有组合的数组的最优雅方法

转载 作者:行者123 更新时间:2023-12-04 01:07:53 27 4
gpt4 key购买 nike

当前获取列名包含给定元素的所有组合的数组的最优雅方法是什么?函数的一些最接近的类似物 expand.grid()来自 R。我在这个问题上遇到的所有讨论要么是关于这个问题的略有不同的表述,要么是在非常旧的 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])
R 中的类似表达式可以写得更紧凑:
xy_comb <- expand.grid(x=seq(0, 1, 0.25), y=seq(0, 1, 0.25))
是否有更简洁的形式在 Julia 中编写相同的表达式?

最佳答案

让我展示几个选项,这些选项也将展示 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
或者这个(这会更快,但是当您动态生成数据框的行时,前一种模式在一般情况下很有用):
julia> rename!(DataFrame(Iterators.product(0:0.25:1, 0:0.25:1)), [:x, :y])
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像这样:
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
具有不同的行顺序。

关于julia - 获取包含给定元素的所有组合的数组的最优雅方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65747474/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com