计算不同类型的组合,当我挣扎。
让我们来举个例子,我有这样的阵列或者它可能是一个数据帧,我想从它的一些列的不同组合。
正如我会再由组合乘以这个矩阵来概括的数字。
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的正确定位,等等......没有效率可言。我有点失落。
我真的不明白的例子背后的逻辑,但这并解决问题了吗?
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]]