如何从不等长的向量生成 Julia 中所有可能的样本路径
How to generate all possible sample paths in Julia from vectors of unequal length
我有 5 个向量 t1,...,t5,它们的长度分别不等 n1, .. ,n5。我如何在 Julia 中生成一个 (n1*...*n5)x(5) 矩阵,它是:
您可能正在寻找的是 Iterators.product
,尽管它不会生成您所请求的内容
julia> n1, n2, n3, n4, n5 = 2, 3, 4, 5, 6;
julia> a = Iterators.product(1:n1, 1:n2, 1:n3, 1:n4, 1:n5)
Base.Iterators.ProductIterator{NTuple{5,UnitRange{Int64}}}((1:2, 1:3, 1:4, 1:5, 1:6))
julia> first(a)
(1, 1, 1, 1, 1)
julia> reduce(vcat, a)
600-element Array{NTuple{5,Int64},1}:
(1, 1, 1, 1, 1)
(2, 1, 1, 1, 1)
(1, 2, 1, 1, 1)
(2, 2, 1, 1, 1)
....
它不会创建您请求的 Matrix,但大多数时候您会生成类似的 Matrix 以将其用于其他用途。在这种情况下,这样更好,因为它避免了分配临时矩阵。
@BogumiłKamiński 在下面的评论中写道,您可以通过
从对象中获得一个矩阵(尽管与示例中的顺序不完全相同)
julia> reduce(vcat, reduce.(hcat, a))
720×5 Array{Int64,2}:
1 1 1 1 1
2 1 1 1 1
1 2 1 1 1
...
这可能不是人们首先想到的事情,但很好地完成了工作。
我有 5 个向量 t1,...,t5,它们的长度分别不等 n1, .. ,n5。我如何在 Julia 中生成一个 (n1*...*n5)x(5) 矩阵,它是:
您可能正在寻找的是 Iterators.product
,尽管它不会生成您所请求的内容
julia> n1, n2, n3, n4, n5 = 2, 3, 4, 5, 6;
julia> a = Iterators.product(1:n1, 1:n2, 1:n3, 1:n4, 1:n5)
Base.Iterators.ProductIterator{NTuple{5,UnitRange{Int64}}}((1:2, 1:3, 1:4, 1:5, 1:6))
julia> first(a)
(1, 1, 1, 1, 1)
julia> reduce(vcat, a)
600-element Array{NTuple{5,Int64},1}:
(1, 1, 1, 1, 1)
(2, 1, 1, 1, 1)
(1, 2, 1, 1, 1)
(2, 2, 1, 1, 1)
....
它不会创建您请求的 Matrix,但大多数时候您会生成类似的 Matrix 以将其用于其他用途。在这种情况下,这样更好,因为它避免了分配临时矩阵。
@BogumiłKamiński 在下面的评论中写道,您可以通过
从对象中获得一个矩阵(尽管与示例中的顺序不完全相同)julia> reduce(vcat, reduce.(hcat, a))
720×5 Array{Int64,2}:
1 1 1 1 1
2 1 1 1 1
1 2 1 1 1
...
这可能不是人们首先想到的事情,但很好地完成了工作。