Python SciPy n的可能情况选择k

时间:2013-08-28 12:32:15

标签: python numpy scipy combinations

a = [1, 2, 3, 4, 5, 6]
# OR !
a = ['one', 'two', 'three', 'four', 'five', 'six']

在这种情况下,我只是想知道所有可能的组合;在 a 中选择 k 元素。如果我使用b = scipy.misc.comb(a, 1),则会显示:

b = [1, 2, 3, 4, 5, 6]

其中b i 只是一个 i 选择1.如果 a 是一个字符串数组,它就不起作用。

我真正想要的是:

b = [[1], [2], [3], [4], [5], [6]]
# OR !
b = [['one'], ['two'], ['three'], ['four'], ['five'], ['six']]

表示数组 a

中元素中可能的1个选定元素的集合

如果我使用MATLAB,这很容易。但我正在尝试使用SciPy堆栈。

2 个答案:

答案 0 :(得分:8)

使用scipy而不是itertools来解决此特定问题的原因是什么?

调查itertools.combinationsitertools.permutations可能会提供更合适的解决方案。

答案 1 :(得分:6)

这是一个更完整的答案。 您应该使用itertools.combinations而不是itertools.permutations,因为组合与排列非常不同。

例如,如果您需要数组的所有两个元素组合,例如[1,2,3,5],则以下代码将生成您想要的结果(相当于Matlab中的nchoosek)。查看更多示例from this source

>>> import itertools
>>> all_combos = list(itertools.combinations([1,2,3,5], 2))
>>> print all_combos
[(1, 2), (1, 3), (1, 5), (2, 3), (2, 5), (3, 5)]

如果您希望所有组合作为2d数组,只需使用以下命令将元组列表转换为numpy数组:

>>> all_combos = np.array(list(itertools.combinations([1,2,3,5], 2)))
>>> print all_combos
[[1 2]
 [1 3]
 [1 5]
 [2 3]
 [2 5]
 [3 5]]