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

不同长度numpy数组绘制的两条曲线交点求解问题

两条不等长数据点曲线求交点的解决方法

核心解决逻辑:你当前报错是因为两条曲线的y数组长度不一致,且x坐标没有对齐,无法直接做差运算。解决核心是将点数少的曲线插值到点数多的曲线的x坐标体系下,得到长度一致的y数组再计算交点。

参考示意图

你提交的原始代码存在两处问题:

  1. pd.read_csv("test1.csv",,skiprows=range(9),names=['A', 'B', 'C','D']) 行多写了一个逗号,会触发语法错误
  2. 直接对长度不等的y1、y2做差,触发广播报错,错误信息如下:

operands could not be broadcast together with shapes (674,) (14,)


修改后可运行的完整代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 修正多余逗号的语法错误
df = pd.read_csv("test1.csv", skiprows=range(9), names=['A', 'B', 'C','D'])
df2 = pd.read_csv("test2.csv", skiprows=range(1), names=['X','Y'])

# 直接取values即可得到numpy数组,无需转list再转换
x1 = df['A'].values
y1 = df['D'].values
x2 = df2['X'].values
y2 = df2['Y'].values

# 核心步骤:将第二条曲线插值到第一条曲线的x坐标上,得到等长的y序列
y2_interp = np.interp(x1, x2, y2)

# 现在可以正常做差找符号变化的位置,也就是交点位置
idx = np.argwhere(np.diff(np.sign(y1 - y2_interp))).flatten()

fig, ax = plt.subplots()
ax.plot(x1, y1, 'blue', label='曲线1')
ax.plot(x2, y2, 'red', label='曲线2')
# 可选:在图上直接标出识别到的交点
ax.scatter(x1[idx], y1[idx], c='green', s=60, zorder=10, label='交点')
ax.legend()

plt.show()

扩展说明

  • 上述方案用的是numpy内置的线性插值,对于绝大多数平滑曲线找交点的需求足够使用。如果需要更高阶的插值效果,可以使用scipy的interp1d方法实现二次、三次样条插值。
  • 上述方法得到的交点是匹配x1坐标点的近似值。如果需要更精确的交点坐标,可以在找到idx对应的x区间后,在区间内对两条曲线做线性拟合求解精确交点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:04