【问题标题】:Combinations in python with different elementspython中不同元素的组合
【发布时间】:2019-02-06 16:03:00
【问题描述】:

我在计算不同类型的组合时很吃力。

让我们用一个例子来解释一下,我有这个数组,或者它可能是一个数据框,我想要其中一些列的不同组合。

然后我将把这个矩阵乘以组合来求和。

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 的正确位置,等等......根本没有效率。 我有点迷茫。

【问题讨论】:

  • "前三列的可能组合为 [1,0,0],[0,1,0],[0,0,1] 后两列为 [1,0] , [0,1] 和最后三个 [1,0,0],[0,1,0],[0,0,1]" 我完全不知道这有什么关系test 数组的先前定义。
  • 对不起,错过了关键部分,我已经更新了我的问题:)

标签: python python-3.x numpy


【解决方案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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-19
    • 2019-12-25
    • 2016-09-25
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    相关资源
    最近更新 更多