Как сгенерировать все возможные выборочные пути в Юлии из векторов неравной длины
У меня есть 5 векторов t1,...,t5, соответствующих неравных длин n1, ..,n5. Как я могу сгенерировать (n1*...*n5)x(5) матрицу в Юлии, которая будет:
https://stackru.com/images/d7f519657d70b11059cec329f2ad bed71a62d42a.png
1 ответ
То, что вы можете искать, это 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)
....
Он не создает запрошенную вами Матрицу, но большую часть времени вы будете создавать такую Матрицу, чтобы использовать ее для чего-то другого. В этом случае это лучше, так как это позволяет избежать выделения временной матрицы.
@ 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
...
это, возможно, не первое, о чем можно подумать, но хорошо справляется со своей работой.