【问题标题】:Calculating area under curve from x, y coordinates [duplicate]从x,y坐标计算曲线下面积[重复]
【发布时间】:2019-09-20 11:14:34
【问题描述】:

假设我有两个名为 xy 的列表,它们都包含数字(坐标),请说:

x = [0, 1, 2, 3, 4, 4, 5]
y = [0, 1, 3, 3, 5, 6, 7]

我需要计算将这两个列表组合到 (x, y) 坐标时形成的曲线下面积。我真的不明白如何创建一个可以根据这些信息计算面积的函数。

def integrate(x, y):
""" x & y = lists, area_under_curve = float value of the area """
    area_under_curve = 0
    last_x = x[0]
    last_y = y[0] 

    for cur_x, cur_y in list(zip(x, y))[1:]:
       ## some code here

    return area_under_curve

【问题讨论】:

  • 问题是离散点图而不是连续线。所以从技术上讲,从数学的角度来看,没有“曲线”。答案因使用的技术而异。使用梯形法则,左黎曼和、右黎曼和或中点都会产生不同的近似值。也许,python 有一些标准库可以解决这样的问题。

标签: python integral


【解决方案1】:

如前所述,使用梯形规则功能相当简单

def integrate(x, y):
   sm = 0
   for i in range(1, len(x)):
       h = x[i] - x[i-1]
       sm += h * (y[i-1] + y[i]) / 2

   return sm

背后的理论是使用插值计算梯形面积。

【讨论】:

  • 这为我的 ROC 曲线 (x=FAR, y=TAR) 生成了一个负的 AUC 值 (-0.996),你知道为什么它是负数吗? @kuco 23
  • 是曲线下的相对面积,所以如果y为负值,则面积为负。 @MasA
【解决方案2】:
import numpy as np
x = [0, 1, 2, 3, 4, 4, 5]
y = [0, 1, 3, 3, 5, 6, 7]

def integrate(x, y):
    area = np.trapz(y=y, x=x)
    return area
print(integrate(x, y))

试试这个

【讨论】:

    猜你喜欢
    • 2021-05-28
    • 2014-08-19
    • 2011-06-24
    • 1970-01-01
    • 2017-10-12
    • 2022-09-23
    • 2015-04-16
    相关资源
    最近更新 更多