[英]Python SciPy Possible cases of n choose k
a = [1, 2, 3, 4, 5, 6]
# OR !
a = ['one', 'two', 'three', 'four', 'five', 'six']
在這種情況下,我只想知道所有可能的組合; 選擇k中的元素。 如果我使用b = scipy.misc.comb(a, 1)
,它會顯示:
b = [1, 2, 3, 4, 5, 6]
其中b i只是我選擇1.如果a是一個字符串數組,它就不起作用。
我真正想要的是:
b = [[1], [2], [3], [4], [5], [6]]
# OR !
b = [['one'], ['two'], ['three'], ['four'], ['five'], ['six']]
這意味着,數組a中元素中可能的1個選定元素的集合
如果我使用MATLAB,這很容易。 但我正在嘗試使用SciPy堆棧。
是否有任何理由使用scipy
而不是itertools
來解決這個特殊問題?
查看itertools.combinations
或itertools.permutations
可以提供更合適的解決方案。
這是一個更完整的答案。 您應該使用itertools.combinations
而不是itertools.permutations
因為組合與排列非常不同。
例如,如果您需要數組的所有兩個元素組合,例如[1,2,3,5]
則以下代碼將生成您想要的結果(相當於Matlab中的nchoosek
)。 查看此來源的更多示例。
>>> 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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.