如何在python中获得一组数组的每个组合

如何在python中获得一组数组的每个组合,python,itertools,Python,Itertools,如何有效地将一组一维阵列的每个组合转换为二维阵列? 假设我有数组A,B,C和D,我想用每个组合创建一个2D数组,这样我就有了代表AB,AC,AD,ABC,ABD,…,CD的2D数组 为了明确我的上述符号: A = np.array([1,2,3,4,5]) B = np.array([2,3,4,5,6]) C = np.array([3,4,5,6,7]) 所以 到目前为止,我已经尝试过以下方法: A = np.array([1,2,3,4,5]) B = np.array([2,3,4,5

如何有效地将一组一维阵列的每个组合转换为二维阵列? 假设我有数组A,B,C和D,我想用每个组合创建一个2D数组,这样我就有了代表AB,AC,AD,ABC,ABD,…,CD的2D数组

为了明确我的上述符号:

A = np.array([1,2,3,4,5])
B = np.array([2,3,4,5,6])
C = np.array([3,4,5,6,7])
所以

到目前为止,我已经尝试过以下方法:

A = np.array([1,2,3,4,5])
B = np.array([2,3,4,5,6])
C = np.array([3,4,5,6,7])
D = np.array([4,5,6,7,8])

stacked = np.vstack((A,B,C,D), axis=0)
combos = []
it2 = itertools.combinations(range(4), r=2)
for i in list(it2):
    combos.append(i)
it3 = itertools.combinations(range(4), r=3)
for i in list(it3):
    combos.append(i)
it4 = itertools.combinations(range(4), r=4)
for i in list(it4):
    combos.append(i)
for combo in combos:
    stacked[combo,:]
    #Then I do something with each combo
这给了我一个所有可能组合的列表。然后我可以应用如下内容:

A = np.array([1,2,3,4,5])
B = np.array([2,3,4,5,6])
C = np.array([3,4,5,6,7])
D = np.array([4,5,6,7,8])

stacked = np.vstack((A,B,C,D), axis=0)
combos = []
it2 = itertools.combinations(range(4), r=2)
for i in list(it2):
    combos.append(i)
it3 = itertools.combinations(range(4), r=3)
for i in list(it3):
    combos.append(i)
it4 = itertools.combinations(range(4), r=4)
for i in list(it4):
    combos.append(i)
for combo in combos:
    stacked[combo,:]
    #Then I do something with each combo
这就是我被卡住的地方 当它只有A,B,C,D时这是很好的,但是如果我有A,B,C,。。。十、 那么上面的方法不能扩展,因为我必须调用itertools 20多次。
如何克服这一问题并使其在实践中更加灵活阵列的数量可能为5-10?

当您有N个项目时,有2^N个组合,因此这将需要2^N次迭代


如果在0范围内使用for循环,则可以使用单个循环进行这2^N次迭代。当有N个项时,有2^N个组合,因此这将需要2^N次迭代


如果在0范围内使用for循环,则可以使用单个循环进行这2^N次迭代。您可以使用额外的外部for循环:

arrays=np.array[假设您的输入数组存储为一个2d数组 [1, 2, 3, 4, 5], [2, 3, 4, 5, 6], ... ] 组合=[] 对于范围为2的r,lenarrays+1: combos.extendit.CombinationsRangeRenarray,r=r
您可以使用附加的外部for循环:

arrays=np.array[假设您的输入数组存储为一个2d数组 [1, 2, 3, 4, 5], [2, 3, 4, 5, 6], ... ] 组合=[] 对于范围为2的r,lenarrays+1: combos.extendit.CombinationsRangeRenarray,r=r 你可以试试这个:

from itertools import combinations

A = np.array([1,2,3,4,5])
B = np.array([2,3,4,5,6])
C = np.array([3,4,5,6,7])

lst = [A,B,C]
[list(combinations(lst, i)) for i in range(1,len(lst)+1)]
输出:

你可以试试这个:

from itertools import combinations

A = np.array([1,2,3,4,5])
B = np.array([2,3,4,5,6])
C = np.array([3,4,5,6,7])

lst = [A,B,C]
[list(combinations(lst, i)) for i in range(1,len(lst)+1)]
输出:


正如其他人也建议的那样,使用


正如其他人也建议的那样,使用

对于Ranger 1:21:等等。?您的代码似乎是在r上手动循环-只需使其成为一个适当的循环。对于范围1:21:etc中的r。?您拥有的代码似乎是在r上手动循环的-只需使其成为一个适当的循环即可。