Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求图上点之间的最长公共间隔_Python_Time Series - Fatal编程技术网

Python 求图上点之间的最长公共间隔

Python 求图上点之间的最长公共间隔,python,time-series,Python,Time Series,我得到以下信息: [[['3', '7'], ['9', '17']], [['1', '5'], ['10', '20']], [['0', '6'], ['12', '19']]] 每个子数组由一个或多个元素组成[['3',7'],['9',17']]表示此函数1在x=3和x=7之间增长,相同的函数1也在x=9和x=17之间增长。 另一个函数2在x=1和x=5之间增长,同一个函数2在x=10和x=20之间增长 这可以在此处以更好的格式查看: [['3', '7'], ['9', '17']

我得到以下信息:

[[['3', '7'], ['9', '17']], [['1', '5'], ['10', '20']], [['0', '6'], ['12', '19']]]
每个子数组由一个或多个元素组成
[['3',7'],['9',17']]
表示此函数1在x=3和x=7之间增长,相同的函数1也在x=9和x=17之间增长。 另一个函数2在x=1和x=5之间增长,同一个函数2在x=10和x=20之间增长

这可以在此处以更好的格式查看:

[['3', '7'], ['9', '17']]
[['1', '5'], ['10', '20']]
[['0', '6'], ['12', '19']]
我需要找到一种方法来计算所有3个函数的最大增长间隔。在这种情况下,解是从x=12到x=17,因为17-12=5比任何其他可能的组合都大

另一个解决方案是x=3到x=5,但由于不是最大值,因此这不是正确的解决方案

有没有一种类似蟒蛇的方法可以找到这个

到现在为止,我一直在为这个特定的案例计算它,但没有成功

这是我得到的最简单的案例,也是众多案例中的一个。
我的问题是,我找不到正确的方法来比较子列表的元素,以便获得所有函数在同一时间间隔内增长的位置…

如果只有整数,可以使用类似的方法(适用于任意数量的函数和时间间隔):


其思想是创建一个包含定义域的字典,然后只保留定义所有函数的点,然后在字典中检查最长的链。

如果只有整数,可以使用类似的方法(适用于任意数量的函数和间隔):


这个想法是用定义的域创建一个字典,然后只保留定义所有函数的点,然后在字典中检查最长的链。

这是我能想到的最简洁的解决方案(有关这里发生的事情的解释,请参见下文):

解释(一旦创建了一些变量,所有这些都变得更容易理解):


下面是我能想到的最简洁的解决方案(关于这里发生的事情的解释,见下文):

解释(一旦创建了一些变量,所有这些都变得更容易理解):

让我草拟一个想法

首先,列出所有可能的组合

listOfCombinations = list(itertools.product(function1, function2, function3))
其次,循环遍历该列表,取下界的最大值和上界的最小值。然后检查这是否是迄今为止您发现的最大差异

for item in listOfCombinations:
    val1 = max(item[0][0], item[1][0], item[2][0])
    val2 = min(item[0][1], item[1][1], item[2][1])
    range = val2 - val1
    if range > maxRange:
        maxRange = range
让我草拟一个想法

首先,列出所有可能的组合

listOfCombinations = list(itertools.product(function1, function2, function3))
其次,循环遍历该列表,取下界的最大值和上界的最小值。然后检查这是否是迄今为止您发现的最大差异

for item in listOfCombinations:
    val1 = max(item[0][0], item[1][0], item[2][0])
    val2 = min(item[0][1], item[1][1], item[2][1])
    range = val2 - val1
    if range > maxRange:
        maxRange = range

如果只有整数,也可以使用集合自动计算交点:

array = [[['3', '7'], ['9', '17']], [['1', '5'], ['10', '20']], [['0', '6'], ['12', '19']]]

s1 = None
s2 = None

for f in array:
    f1 = f[0]
    f2 = f[1]
    sf1 = set(xrange(int(f1[0]), int(f1[1])+1))
    sf2 = set(xrange(int(f2[0]), int(f2[1])+1))
    if not s1:
        s1 = sf1
        s2 = sf2
    else:
        s1.intersection_update(sf1)
        s2.intersection_update(sf2)

print s1, s2

如果只有整数,也可以使用集合自动计算交点:

array = [[['3', '7'], ['9', '17']], [['1', '5'], ['10', '20']], [['0', '6'], ['12', '19']]]

s1 = None
s2 = None

for f in array:
    f1 = f[0]
    f2 = f[1]
    sf1 = set(xrange(int(f1[0]), int(f1[1])+1))
    sf2 = set(xrange(int(f2[0]), int(f2[1])+1))
    if not s1:
        s1 = sf1
        s2 = sf2
    else:
        s1.intersection_update(sf1)
        s2.intersection_update(sf2)

print s1, s2


那么你在寻找最长的公共间隔?@EmilVikström是的,这正是我要寻找的,但我不知道如何编写它……数组中只使用整数吗?我想不是,只是checking@MarcinCuprjak是的,数组中只有整数,至少目前是这样。只使用整数就可以解决问题了,所以您要寻找最长的公共间隔?@EmilVikström是的,这正是我要寻找的,但我不知道如何编写它……数组中是否只使用整数?我想不是,只是checking@MarcinCuprjak是的,数组中只有整数,至少目前是这样。这将是一个很好的工作解决方案,只是与整数谢谢你与我分享你的解决方案!非常感谢!感谢您与我分享您的解决方案!非常感谢!感谢您分享此解决方案!我在这一点上坚持了好几个小时,这正是我想要的!简单易懂!谢谢1请参阅更新的答案,了解更多的Python方法,是的,这个问题也花了一段时间才在这里得到理解。谢谢我认为这个小脚本有问题,在示例中工作,但是如果更改
[[3,7],[9,21],[[1,5],[10,20],[[0,6]]]
中的输入,输出应该是3,5,而实际输出是10,20。我想知道为什么你需要这么多时间!感谢您的帮助和宝贵的时间!:)伙计,我用的是另一个版本!现在一切都好了!感谢您花了这么多时间和这么漂亮的解决方案~Federico P。感谢您分享这个解决方案!我在这一点上坚持了好几个小时,这正是我想要的!简单易懂!谢谢1请参阅更新的答案,了解更多的Python方法,是的,这个问题也花了一段时间才在这里得到理解。谢谢我认为这个小脚本有问题,在示例中工作,但是如果更改
[[3,7],[9,21],[[1,5],[10,20],[[0,6]]]
中的输入,输出应该是3,5,而实际输出是10,20。我想知道为什么你需要这么多时间!感谢您的帮助和宝贵的时间!:)伙计,我用的是另一个版本!现在一切都好了!感谢您花了这么多时间和这么漂亮的解决方案~Federico P。这实际上还给了我一些设置,而我需要知道所有3个函数
[['3'、['7']、['9'、['17']]
['1'、['5']、['10'、['20']
['0'、['6']、['12'、['19']
正在一起成长,如果有许多点具有此特征,我需要选择较大的一点。在我的例子中是从12 17开始的。无论如何,感谢您的时间!这实际上给了我回集,同时我需要知道所有3个函数
[['3','7',['9','17']
['1',5',['10',20']
[['0'、['6']、['12'、[19']
正在一起增长,如果有许多具有此特征的点,我需要选择较大的点。在我的例子中,是从12 17开始的