从 numpy 数组中设置所有长度为 2
All sets length 2 from numpy array
这似乎是一个固定的 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
您可以使用 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))]
您仍然可以使用双 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)
这似乎是一个固定的 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
您可以使用 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))]
您仍然可以使用双 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)