我正在努力找到这个问题背后的关键理念:
我在坐标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
使用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']]
这是功能正在增长的部分。
但是现在我遇到了很大麻烦才能理解如何进行下一步,基本上将这些功能进行比较以获得最大增长间隔。
任何建议都将不胜感激!
答案 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]])