2017-06-02 252 views
0

我有一个随机数据集,我想知道是否可以找到所有的点之间的差异大于某些常数。只要相应值之间的差值大于该常数,这些点是否不连续都没有关系。找到两个值之间的差异?

+0

我们需要一个数据示例 – codyc4321

+2

使用经过数据集的嵌套循环并计算元素之间的差异。 – Barmar

+2

请更具体的:添加输入样本和所需的输出 –

回答

3

您可以(也可能应该)使用itertools.permutations,不需要嵌套循环。

E.摹:如果我们想找到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)] 
+0

非常感谢。这正是我期待的。我真的很感激 –

+0

@alexanderson:不客气(你也可以[回答投票](https://stackoverflow.com/help/someone-answers)) –

0

是的,这是可能的。 这将是这样的:

sets = [] 
for item1 in dataset: 
    for item2 in dataset: 
     if abs(item1 - item2) > somevalue): 
      sets.append((item1, item2)) 

您创建一个sets列表,保存值,对其中有一个绝对差值比somevalue大这是要去。然后将包含这些项目值的集合追加到sets

编辑:列表sets是一个可变对象,如果你想这是不可变的,这段代码将不适用于你。

+0

name'sets'具有误导性,让我觉得它包含'set'对象 –

+0

@AzatIbrakov:这不是一个微妙的提示吗? ;) – Arafangion

+0

它确实包含集合对象,它是集合列表 –

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添加到结果。

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)的文档。

但是,要将此应用于您的问题,您需要提供一个您拥有的数据和您想要的结果的示例。例如,可能需要一些标准化,或者你可能没有处理集合。

+0

你所做的被称为['symmetric difference'](https://en.wikipedia.org/wiki/Symmetric_difference),'set'有一个[method](https://docs.python.org/2 /library/sets.html#set-objects):'a。symmetric_difference(b)'(但是我不知道OP是在找什么) –

+0

@AzatIbrakov:的确,运营商似乎已经重载了' - '来做到这一点。 – Arafangion

+0

通过使用“set”这个词,我很抱歉用错误的方式来提问这个问题。我在随机数据集中寻找一对数字,如果相乘,就会产生一个常数值。我为我的错误道歉。 –

相关问题