答案 0 :(得分:3)
您可能正在寻找的是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
...
这可能不是人们会想到的第一件事,但是可以很好地完成工作。