Как сгенерировать все возможные выборочные пути в Юлии из векторов неравной длины - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть 5 векторов t1, ..., t5, соответствующих неравных длин n1, .., n5.Как я могу сгенерировать (n1 * ... * n5) x (5) матрицу в Юлии, которая будет:

enter image description here

1 Ответ

0 голосов
/ 08 февраля 2019

Возможно, вы ищете 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
...

, что, возможно, не первое, о чем можно подумать, но хорошо справляется со своей работой.

...