Python 找到坡度最陡的点

Python 找到坡度最陡的点,python,Python,我有一个浮点数列表,如[x1,x2,x3,x4,….xn],这些浮点数以线图的形式绘制。我想找出斜率最陡的一组点 现在,我正在计算循环中一组点之间的差值,并使用max()函数确定最大点 还有其他优雅的方法吗?Numpy有许多用于处理阵列的工具。例如,您可以: import numpy as np xx = np.array([x1, x2, x3, x4, ...]) # your list of values goes in there print(np.argmax(xx[:-1] -

我有一个浮点数列表,如
[x1,x2,x3,x4,….xn]
,这些浮点数以线图的形式绘制。我想找出斜率最陡的一组点

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


还有其他优雅的方法吗?

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

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

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

max_slope = max([x - z for x, z in zip(points[:-1], points[1:])])
但你在紧凑性上获得的东西,可能在可读性上失去

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

  • 在原始列表的基础上创建了两个列表,即
    点[:-1]
    点[1:][/code><代码>点[:-1]
    从原始列表的开头开始,转到倒数第二项(包括)<代码>点[1://code>从第二项开始,一直到最后一项(再次包含)
范例

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
    参数
比如:

  • 最后,使用创建的对计算差异,将结果存储在列表中并获得最大值

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

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

max_slope = max([x - z for x, z in zip(points[:-1], points[1:])])
但你在紧凑性上获得的东西,可能在可读性上失去

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

  • 在原始列表的基础上创建了两个列表,即
    点[:-1]
    点[1:][/code><代码>点[:-1]
    从原始列表的开头开始,转到倒数第二项(包括)<代码>点[1://code>从第二项开始,一直到最后一项(再次包含)
范例

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
    参数
比如:

  • 最后,使用创建的对计算差异,将结果存储在列表中并获得最大值

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

如果你的点间距相等(或假设相等),那么你的方法将尽可能优雅。问题是你的代码有多优雅。目前,我对范围内的i(len(list)):slope.append(list[i]-list[i+1])print(slope.index(max(slope))执行以下操作其中slope是差异列表,list是浮点数的原始列表将列表放入numpy数组并使用
numpy.diff
可能会感觉更优雅。(例如,代码可能类似于
最陡=np.argmax(np.diff(np.array(my_list)))
@mechanical您的代码不运行。您会得到一个索引错误。@Ev.Kounis抱歉。对于范围内的i(len(list)-1),第一行应该是
。忘记添加-1,如果您的点间隔相等(或假定相等)你的方法非常优雅。问题是你的代码有多优雅。目前,我对范围内的i(len(list)):slope.append(list[i]-list[i+1])print(slope.index(max(slope)))执行以下操作
其中slope是差异列表,list是浮点数的原始列表将列表放入一个numpy数组中,使用
numpy.diff
可能会感觉更优雅。(例如,代码可能是类似
最陡=np.argmax(np.diff(np.array(my_list)))
@mechanical您的代码没有运行顺便说一句。您得到了一个索引错误。@Ev.Kounis抱歉。第一行应该是
for i in range(len(list)-1)
。忘记添加-1您不需要numpy来摆脱for循环,但是这个解决方案也很优雅。您不需要numpy来摆脱for循环,但这个解决方案也很优雅。