时间序列中的最大增长期

时间:2016-03-30 11:09:43

标签: python time-series

我正在努力找到这个问题背后的关键理念:

我在坐标x,y中给出以下输入:

0,2 3,0 4,5 7,8 8,6 9,5 13,6 15,9 17,10 21,8
1,3 3,4 5,9 7,5 10,2 11,4 20,10
0,0 6,6 12,3 19,6

图形对应于以下内容: Graph

使用Python,我需要找到使用stdin传递的所有n个函数的最大增长间隔。

到目前为止,我设法得到以下输出:

[['0', '2', '-'], ['3', '0', '+'], ['4', '5'], ['7', '8', '-'], ['8', '6'], ['9', '5', '+'], ['13', '6'], ['15', '9'], ['17', '10', '-'], ['21', '8']]
[['1', '3', '+'], ['3', '4'], ['5', '9', '-'], ['7', '5'], ['10', '2', '+'], ['11', '4'], ['20', '10']]
[['0', '0', '+'], ['6', '6', '-'], ['12', '3', '+'], ['19', '6']]

这是功能正在增长的部分。

但是现在我遇到了很大麻烦才能理解如何进行下一步,基本上将这些功能进行比较以获得最大增长间隔。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

您可以使用numpy

导入numpy并创建使数据点成为数组。

In [1]: import numpy as np

In [2]: a = np.array([(0,2), (3,0), (4,5), (7,8), (8,6), (9,5), (13,6), (15,9), (17,10), (21,8)])

In [3]: a
Out[3]: 
array([[ 0,  2],
       [ 3,  0],
       [ 4,  5],
       [ 7,  8],
       [ 8,  6],
       [ 9,  5],
       [13,  6],
       [15,  9],
       [17, 10],
       [21,  8]])

找出x和y中连续点之间的差异;

In [4]: diff = a[1:] - a[:-1]

In [5]: diff
Out[5]: 
array([[ 3, -2],
       [ 1,  5],
       [ 3,  3],
       [ 1, -2],
       [ 1, -1],
       [ 4,  1],
       [ 2,  3],
       [ 2,  1],
       [ 4, -2]])

分开并划分以创建斜率;

In [6]: dx, dy = np.hsplit(diff, 2)

In [7]: slope = dy/dx

In [8]: slope
Out[8]: 
array([[-0.66666667],
       [ 5.        ],
       [ 1.        ],
       [-2.        ],
       [-1.        ],
       [ 0.25      ],
       [ 1.5       ],
       [ 0.5       ],
       [-0.5       ]])

如您所见,最大斜率为slope[1],等于5.这是斜率数组的第二个元素,因此这发生在第二个和第三个元素之间。 ;

In [8]: a[1:3]
Out[8]: 
array([[3, 0],
       [4, 5]])