You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确计算数组中每条y=f(x)曲线与X轴间的面积?

解决numpy.trapz计算多条曲线面积的问题

我明白你的问题了——你现在有形状为(22, 2)的X和Y数组,相当于2条独立的曲线(每一列对应一条曲线,每条曲线有22个采样点),但直接用np.trapz(y, x)得到的结果不符合预期,因为numpy的trapz默认积分的轴不对。

问题原因

默认情况下,np.trapz会沿着**最后一个轴(axis=-1)**计算积分。对于(22,2)的数组来说,这意味着它会对每一行的2个元素做积分,最后得到一个形状为(22,)的数组,这显然不是你要的每条曲线(列)的单值面积。

解决方案

你只需要指定axis=0,告诉trapz沿着行的方向(也就是每个曲线的采样点维度)进行积分,这样就能得到每条曲线对应的单个面积值了:

import numpy as np

# 假设你的X和Y是形状(22,2)的数组
area = np.trapz(Y, X, axis=0)

这样得到的area会是一个形状为(2,)的数组,其中第一个元素对应第一条曲线(Y的第0列)与X轴围成的面积,第二个元素对应第二条曲线(Y的第1列)的面积。

验证示例

举个简单的测试例子,用两条已知面积的直线验证:

# 第一条曲线是y=x,从x=0到x=21(22个点),面积应为(21*21)/2=220.5
# 第二条曲线是y=2x,面积应为220.5*2=441
X = np.arange(22).reshape(22, 1)
X = np.hstack([X, X])  # 构造形状(22,2)的X数组
Y = X * np.array([1, 2])  # 构造两条曲线的Y数组

area = np.trapz(Y, X, axis=0)
print(area)  # 输出 [220.5 441. ],与预期完全一致

内容的提问来源于stack exchange,提问作者Krystal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:22:52