簡體   English   中英

Python在2D網格上插值點值

[英]Python interpolate point value on 2D grid

我有一個常規的2D X,Y和Z數組,我有一個點X0和Y0,我想知道我的網格上的點(X0,Y0)中的Z0值。

我發現scipy有插值模塊,但據我所知它插入1D / 2D數組並返回1D / 2D數組,但是沒有方法只能在一個點返回一個值。

例如:

#My grid data
X = [ [X11, X12, X13, ..., X1N], 
      [X21, X22, X23, ..., X2N],
          ....
      [XN1, XN2, XN3, ..., XNN]

Y = [ [Y11, Y12, Y13, ..., Y1N], 
      [Y21, Y22, Y23, ..., Y2N],
          ....
      [YN1, YN2, YN3, ..., YNN] ]

Z = [ [Z11, Z12, Z13, ..., Z1N], 
      [Z21, Z22, Z23, ..., Z2N],
          ....
      [ZN1, ZN2, ZN3, ..., ZNN] ]

#Point at which I want to know the value of the Z
X0, Y0 = ..., ...

#Now I want to call any function that'll return the value at point (X0, Y0), Z0 is float value, not array
Z0 = interpolation(X, Y, Z, X0, Y0)

據我所知,類似的函數是scipy.interpolate.interpn,但它只適用於1D數組,當我想處理2D數據時發出錯誤

  • 你也可以使用griddata:

     points = np.array( (X.flatten(), Y.flatten()) ).T values = Z.flatten() from scipy.interpolate import griddata Z0 = griddata( points, values, (X0,Y0) ) 
  • X0和Y0可以是數組甚至是網格。

  • 你也可以用method =選擇插值
  • 也許你可以找到一種方法來獲得flatten(),但它應該工作。

https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html

scipy.interpolate griddata可以在單個點上工作,就像在數組上一樣好。 將該點傳遞給函數和Voila。 你有一個單一的價值。

    import numpy as np
    from scipy.interpolate import griddata
    points = np.array([[1,1],[1,2],[2,2],[2,1]])
    values = np.array([1,4,5,2])
    xi=([1.2,1.5])
    result=griddata(points, values, xi,  method='linear')
    print("Value of interpolated function at",xi,"=",*result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM