gpt4 book ai didi

Python:numpy.interp 给出曲线

转载 作者:太空狗 更新时间:2023-10-30 03:01:56 37 4
gpt4 key购买 nike

我正在尝试将低分辨率曲线(10 个数据点)线性插值到更高分辨率(~1000 个数据点)。我想要的是一条形状相同但具有更多 x 和 y 值的新曲线,即高分辨率和低分辨率曲线在绘制为线条时看起来无法区分。

我多次使用 Numpy 的插值法,所以这让我感到困惑。我做了通常的 np.interp(newX, oldX, oldY) 但是当我绘制它时我得到了一个有趣的结果。

Not linear interpolation

绿色方 block 之间的线应该是直的,而不是像这样弯曲。

我不确定这是否重要,但我的 X 值范围从 0 到 1000,我的 Y 值范围从 1e-12 到 1e-16。任何建议将不胜感激!

更新:上面的图是对数刻度,但它也发生在线性图上。

Linear plot, same problem!

这是实际数据。 (实际上是 1e-15 到 1e-19):

X = array([  0.3543  ,   0.477   ,   0.544579,   0.6231  ,   0.64142 ,
0.7625 , 0.79788 , 0.9134 , 1.02894 , 1.235 ,
1.241608, 1.615118, 1.662 , 2.159 , 2.181858,
3.4 , 3.507511, 3.732206, 4.436578, 4.6 ,
4.664426, 5.628102, 7.589159, 12. ])

Y = array([ 8.54633502e-19, 3.82388943e-18, 7.33750003e-18,
2.98683733e-17, 7.77237551e-17, 2.04059657e-16,
3.72124584e-16, 8.77407275e-16, 1.65824812e-15,
2.48616026e-15, 2.80165491e-15, 2.03270375e-15,
2.03205199e-15, 1.24592352e-15, 1.20231667e-15,
3.85565084e-16, 4.34827044e-16, 3.86967563e-16,
1.67622220e-16, 1.48774069e-16, 1.25065750e-16,
7.53511540e-17, 2.34138998e-17, 5.77852724e-18])

所以我确信这确实只是一个对数尺度效应。但出于某种原因,当我使用 ax.loglog() 绘制它然后执行 ax.set_yscale('linear') 时,轴比例会发生变化,但子图数据不会'吨。当我使用 ax.plot() 绘制它时,它看起来很好。

谁能解释一下?

最佳答案

我也遇到了同样的问题,但使用的是 scipy 的 interpolate.interp1d。问题不在于代码,而在于对数的工作原理。线性图上的直线变成半对数图上的曲线。考虑极限情况,您只有两个点 (ya,xa)(yb,xb) 要在半对数图上绘制并连接。如果您首先在这些点之间进行线性插值,则会创建一个对象,该对象是一条线段 L(x)(例如,由精细网格点组成的数组表示)。如果您随后获取 L 的对数并将其与 x 作图,您将得到一条曲线。这就是在您的附加图上给出“弹性”行为的原因。如果你想在对数图中画一条直线,你需要取 yayb 的对数,插值,然后绘图。如果您正在查看跨越数十年的内容,您可能希望在获取日志后进行插值,但这可能取决于您的应用程序。

关于Python:numpy.interp 给出曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23946908/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com