所有从numpy数组中设置长度为2

时间:2016-02-19 23:25:34

标签: python arrays numpy scipy combinatorics

这似乎是一个罐头的numpy或scipy功能......但是我无法找到它。

我有一个元组数组,其中元组包含类的平均值和标准偏差。我需要一个第二个数组,其中包含元组的所有独特组合(因此所有数组的长度为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))]

用于任意加长的原始数组。

我现在所拥有的:

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 个答案:

答案 0 :(得分:2)

您可以使用itertools.combinbin:

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))]

答案 1 :(得分:1)

你仍然可以使用double 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)