找出两个值之间的差异?

时间:2017-06-02 00:54:45

标签: python

我有一个随机数据集,我想知道是否有可能找到它们之间的差异大于某个常数的所有点集。只要相应值之间的差值大于该常数,这些点是否不连续也无关紧要。

4 个答案:

答案 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, jj, i添加到结果中。