【问题标题】:Python interpolation and extracting value of z for x and y?Python 插值和提取 x 和 y 的 z 值?
【发布时间】:2017-11-09 11:49:49
【问题描述】:

请帮忙 我有这些数据,其中 z 是特定 x 和 y 的函数

xs = [0.15, 0.35, 0.5, 0.67, 0.8]
ys = [0.01,0.01, 0.01, 0.01, 0.01]
z = [0.75, 0.83, 1.00, 0.92, 0.91]

我把值排列成这个形状 如何对点进行插值,以便稍后调用不同于我所拥有的 z 值?

【问题讨论】:

    标签: python-3.x interpolation curve-fitting curve linear-interpolation


    【解决方案1】:

    一个简单的搜索就会有所帮助。 你的问题基本上是 scipy.interpolate.interp2d documentation.

    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    from scipy import interpolate
    import numpy as np
    
    xs = [ 0.15, 0.35, 0.5, 0.67, 0.8 ]
    ys = [ 0.01, 0.05, 0.1, 0.2, 0.3 ]
    zz = np.array( [
        0.75, 0.83, 1.00, 0.92, 0.91,
        0.75, 0.82, 0.87, 0.88, 0.88,
        0.74, 0.81, 0.84, 0.83, 0.83,
        0.72, 0.76, 0.77, 0.76, 0.76,
        0.72, 0.72, 0.72, 0.72, 0.72 
        ] ).reshape( ( 5, 5 ) )
    
    xx, yy = np.meshgrid( xs, ys )
    f = interpolate.interp2d( xx, yy, zz, kind='cubic' )
    
    fig = plt.figure()
    ax = fig.add_subplot( 1, 1, 1, projection='3d' )
    ax.plot_surface( xx, yy, zz)
    
    x2 = np.linspace( .15,.8,50 )
    y2 = np.linspace( .01,.3,50 )
    
    xx2, yy2 = np.meshgrid( x2, y2 )
    zz2 = f( x2, y2 )
    
    fig2 = plt.figure()
    bx = fig2.add_subplot( 1, 1, 1, projection='3d' )
    bx.plot_surface( xx2, yy2, zz2 )
    
    plt.show()
    

    提供原始数据

    以及 50 x 50 网格上的三次插值

    【讨论】:

    • @PrincessZena 什么没用?您可以发布您尝试的代码吗?
    • 感谢您的回答,但我想要的是在特定 x 和 y 处获取 z 的值,我的答案如下
    【解决方案2】:
    tck = interpolate.bisplrep(x, y, z, s=0)
    def givemeZ(x,y):
        return interpolate.bisplev(x,y,tck)
    

    现在通过运行代码,它将为特定的 x 和 y 提供 z。 这可以在没有情节的情况下使用。只需将其放在值下并确保值以相同的方式排列

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 2020-09-04
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2013-02-26
      • 1970-01-01
      相关资源
      最近更新 更多