我有一个随机数据集,我想知道是否有可能找到它们之间的差异大于某个常数的所有点集。只要相应值之间的差值大于该常数,这些点是否不连续也无关紧要。
答案 0 :(得分:3)
Python支持集合:
>>> a = {1, 2, 3}
>>> type(a)
<type 'set'>
>>> b = {2, 4, 5}
>>> a-b # Finds all items in a, but not in b.
set([1, 3])
>>> b-a # Finds all items in b, but not in a.
set([4, 5])
>>> (a-b).union(b-a) # Finds the union of both differences.
set([1, 3, 4, 5])
有关文档,请参阅help(set)
。
然而,要将此问题应用于您的问题,需要一个您拥有的数据和您想要的结果的示例。例如,可能需要进行一些规范化,或者您可能不会处理集合。
答案 1 :(得分:3)
您可以(也可能应该)使用itertools.permutations
,不需要嵌套循环。
电子。 g。:如果我们想要找到10到15之间(包括10和15)之间数字的元素,差异大于3:
from itertools import permutations
numbers = range(10, 16)
restriction = 3
filtered_numbers_pairs = []
for value, other_value in permutations(numbers, r=2):
if value - other_value > restriction:
filtered_numbers_pairs.append((value, other_value))
print(filtered_numbers_pairs)
给我们
[(14, 10), (15, 10), (15, 11)]
或者如果您需要存储值索引 - 只需添加enumerate
:
from itertools import permutations
numbers = range(10, 16)
restriction = 3
filtered_numbers_pairs = []
for (index, value), (other_index, other_value) in permutations(enumerate(numbers), r=2):
if value - other_value > restriction:
filtered_numbers_pairs.append((index, other_index))
print(filtered_numbers_pairs)
给我们
[(4, 0), (5, 0), (5, 1)]
答案 2 :(得分:0)
是的,这是可能的。 它会是这样的:
sets = []
for item1 in dataset:
for item2 in dataset:
if abs(item1 - item2) > somevalue):
sets.append((item1, item2))
您创建一个sets
列表,该列表将保存绝对差值大于somevalue
的值对。然后,将包含这些项的值的集合追加到sets
。
编辑:列表sets
是一个可变对象,如果您希望它是不可变的,则此代码不适合您。
答案 3 :(得分:0)
使用嵌套循环
diff = []
for i, val1 in enumerate(dataset):
for j, val2 in enumerate(dataset[i+1:]):
if abs(val1 - val2) > some_constant:
diff.append((i, j))
内部循环使用数组的一部分,因此我们不会将i, j
和j, i
添加到结果中。