找到最陡坡蟒蛇的点

时间:2016-07-08 08:50:04

标签: python

我有一个浮动点列表,例如[x1,x2,x3,x4,....xn],它们被绘制成折线图。我想找到坡度最陡的一组点。

现在,我正在计算循环中一组点之间的差异,并使用max()函数来确定最大点。

还有其他优雅方式吗?

2 个答案:

答案 0 :(得分:3)

Numpy有许多用于处理数组的工具。例如,您可以:

import numpy as np

xx = np.array([x1, x2, x3, x4, ...])  # your list of values goes in there
print(np.argmax(xx[:-1] - xx[1:]))  # for all python versions

答案 1 :(得分:3)

假设points是您的值列表,您可以使用以下方法计算单行中的差异:

max_slope = max([x - z for x, z in zip(points[:-1], points[1:])])

但是你在紧凑性方面获得了什么,你可能会失去可读性。

此列表理解中发生的情况如下:

  • 根据原始列表创建两个列表,即points[:-1]& points[1:]Points[:-1]从原始列表的开头开始,转到第二个到最后一个项目(包括)。 Points[1:]从第二个项目开始,一直到最后一个项目(包括在内)。

实施例

example_list = [1, 2, 3, 4, 5]
ex_a = example_list[:-1]  # [1, 2, 3, 4]
ex_b = example_list[1:]   # [2, 3, 4, 5]
  • 然后您拉链两个列表创建一个对象,您可以从中绘制x,z对来计算差异。请注意,zip不会在Python 3中创建列表,因此您需要将其返回值传递给list参数。

像:

example_list = [1, 2, 3, 4, 5]
ex_a = example_list[:-1]  # [1, 2, 3, 4]
ex_b = example_list[1:]   # [2, 3, 4, 5]
print(list(zip(ex_a, ex_b)))  # [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
  • 最后,您使用创建的对计算差异,将结果存储在列表中并获得最大值。

如果最大斜率的位置也很有趣,您可以使用.index()方法从创建的列表中获取索引。但是,在这种情况下,保存由理解创建的列表可能会更好,而不仅仅是使用它。