我有一个浮动点列表,例如[x1,x2,x3,x4,....xn]
,它们被绘制成折线图。我想找到坡度最陡的一组点。
现在,我正在计算循环中一组点之间的差异,并使用max()
函数来确定最大点。
还有其他优雅方式吗?
答案 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]
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()
方法从创建的列表中获取索引。但是,在这种情况下,保存由理解创建的列表可能会更好,而不仅仅是使用它。