如何在python中获得一组数组的每个组合
如何有效地将一组一维阵列的每个组合转换为二维阵列? 假设我有数组A,B,C和D,我想用每个组合创建一个2D数组,这样我就有了代表AB,AC,AD,ABC,ABD,…,CD的2D数组 为了明确我的上述符号:如何在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 = 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上手动循环的-只需使其成为一个适当的循环即可。