簡體   English   中英

Python SciPy n的可能情況選擇k

[英]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.combinationsitertools.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM