在计算不同类型的组合时,我很挣扎。
让我们用一个例子来解释一下,我有这个数组,也可能是一个数据框,我希望从中获得一些列的不同组合。
然后我将这个矩阵乘以组合来求和。
test = np.array ([[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33],
[10,11,12,21,22,31,32,33]])
前三列的可能组合是[1,0,0],[0,1,0],[0,0,1],所以我需要10或11或12 因此,紧接在第21列或第22列之后的是[1,0],[0,1]组合 最后三列31,3 2,33,则为[1,0,0],[0,1,0],[0,0,1]
因此,我可以使用在另一个问题中发现的此功能来获得可能的组合。
n=3
for i in range(2**n):
s = bin(i)[2:]
s = "0" * (n-len(s)) + s
print (list(s))
哪个给我:
['0', '0', '0']
['0', '0', '1']
['0', '1', '0']
['0', '1', '1']
['1', '0', '0']
['1', '0', '1']
['1', '1', '0']
['1', '1', '1']
所有可能的组合,包括零。虽然我设法删除了这些。
它的计算量超过了我所需的组合,我发现自己消除了太多不需要的组合。
当我只需要这些情况时:
[1,0,0, 1,0, 1,0,0]
[0,1,0, 1,0, 1,0,0]
[0,0,1, 1,0, 1,0,0]
[1,0,0, 0,1, 1,0,0]
[0,1,0, 0,1, 1,0,0]
[0,0,1, 0,0, 1,0,0]
etc....
我需要删除许多与8种情况无关的行,并删除发现三个以上1的行,并选择正确放置1的行,等等……根本没有效率。 我有点迷路了。
答案 0 :(得分:0)
我真的不理解该示例背后的逻辑,但这能解决您的问题吗?
from itertools import product,permutations
a = set(permutations([0,0,1]))
b = set(permutations([0,1]))
comb = []
for t1,t2,t3 in product(a,b,a):
comb.append([*t1,*t2,*t3])
print(comb)
# [[1, 0, 0, 0, 1, 1, 0, 0],
# [1, 0, 0, 0, 1, 0, 1, 0],
# [1, 0, 0, 0, 1, 0, 0, 1],
# [1, 0, 0, 1, 0, 1, 0, 0],
# [1, 0, 0, 1, 0, 0, 1, 0],
# [1, 0, 0, 1, 0, 0, 0, 1],
# [0, 1, 0, 0, 1, 1, 0, 0],
# [0, 1, 0, 0, 1, 0, 1, 0],
# [0, 1, 0, 0, 1, 0, 0, 1],
# [0, 1, 0, 1, 0, 1, 0, 0],
# [0, 1, 0, 1, 0, 0, 1, 0],
# [0, 1, 0, 1, 0, 0, 0, 1],
# [0, 0, 1, 0, 1, 1, 0, 0],
# [0, 0, 1, 0, 1, 0, 1, 0],
# [0, 0, 1, 0, 1, 0, 0, 1],
# [0, 0, 1, 1, 0, 1, 0, 0],
# [0, 0, 1, 1, 0, 0, 1, 0],
# [0, 0, 1, 1, 0, 0, 0, 1]]