2016-02-19 72 views
0

這看起來像是一個罐頭的numpy或scipy函數......但我無法找到它。所有從numpy數組中設置的長度爲2

我有一個元組數組,其中元組包含類的均值和標準差。我需要第二個數組與所有獨立的元組相互組合(所以所有的數組長度爲2的子集)。

所以,例如:

original = [(0.5,0.112),(2.3,0.1),(5,0.7)] 

我需要:

subsets = [((0.5,0.112),(2.3,0.1)),/ 
      ((0.5,0.112),(5,0.7)),/ 
      ((2.3,0.1),(5,0.7))] 

爲任意lengthed原始陣列。

我有什麼現在:

def subsets_length_2(vector): 
    subset_vector = [] 
    for i in vector: 
     for j in vector: 
      if i != j: 
       subset_vector.append((i,j)) 
    subset_vector = np.asarray(np.unique(subset_vector)) 
    return subset_vector 

回答

2

您可以使用itertools.combinations:

import itertools 
subsets = list(itertools.combinations(original, 2)) 
print subsets 
# [((0.5, 0.112), (2.3, 0.1)), ((0.5, 0.112), (5, 0.7)), ((2.3, 0.1), (5, 0.7))] 
+0

這看起來像我在想什麼。謝謝 – bordeo

+0

不客氣:-) –

1

您仍然可以使用雙重for循環,但它在沒有必要循環整個數組與內部for循環。

def subsets_length_2(vector): 
    subset_vector = [] 
    n = len(vector) 
    for i in range(n-1): 
     for j in range(i+1, n): 
      subset_vector.append((vector[i],vector[j])) 
    return np.asarray(subset_vector) 
+0

良好的通話,謝謝你。 – bordeo

相關問題