【发布时间】:2021-01-06 00:59:59
【问题描述】:
我有m 项。每个项目都是一对两个值。例如,对于m=4,我有矩阵:
julia> valid_pairs = [0 1;
1 2;
1 2;
2 3];
我想生成四个项目的所有组合,其中每个项目i 只能采用valid_pairs[i, :] 中的值。基于前面的例子,我想有:
julia> all_combs
4x16 Array{Int,2}
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
1 1 1 1 2 2 2 2 1 1 1 1 2 2 2 2
1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2
2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3
我觉得使用Combinatorics.jl 可以轻松完成。
虽然我使用了Combinatorics.jl,但我所做的是:
using Combinatorics
m = 4
combs = combinations(1:m) |> collect
L = length(combs)
all_combs = zeros(Int, m, L+1)
for j in 1:L
for i in 1:m
if !in(i, combs[j])
all_combs[i, j] = valid_pairs[i, 1]
else
all_combs[i, j] = valid_pairs[i, 2]
end
end
end
all_combs[:, end] = valid_pairs[:, 1]
【问题讨论】:
标签: julia combinations combinatorics