2017-12-20 37 views
1

x、y、zは距離、Vは水分の形の(x, y, z, V)というデータがあります。 thisthis貴重な投稿のように、私はStackOverflowで補間について多くを読んでいましたが、それらのすべては約x, y, zという規則的なグリッドでした。つまり、xのすべての値は、yの各点と、すべての点が均等に寄与します(z)。一方、私の指摘は、グリッドが規則的でない3D有限要素グリッド(以下に示す)から来ています。 Pythonによる不規則な(x、y、z)グリッドの4D補間

enter image description here

は、二つは、それらが(3Dの例では)、次いでcartcoord = zip(x, y)scipy.interpolate.LinearNDInterpolator(cartcoord, z)ようなものを使用する別numpyの配列としてX、Y、Zの各定義ポスト12を挙げ。私は3Dグリッドが規則的ではないので、各点が他の点に寄与しないので同じことをすることはできませんので、これらのアプローチを繰り返したときに多くのヌル値が見つかった場合、ここで

[x, y, z, V]

data = [[27.827, 18.530, -30.417, 0.205] , [24.002, 17.759, -24.782, 0.197] , 
[22.145, 13.687, -33.282, 0.204] , [17.627, 18.224, -25.197, 0.197] , 
[29.018, 18.841, -38.761, 0.212] , [24.834, 20.538, -33.012, 0.208] , 
[26.232, 22.327, -27.735, 0.204] , [23.017, 23.037, -29.230, 0.205] , 
[28.761, 21.565, -31.586, 0.211] , [26.263, 23.686, -32.766, 0.215]] 

の形で私はそれを得ることができますどのようにポイント(25, 20, -30)

の補間値Vを取得したい10個のサンプル点ですか?

答えて

3

私は答えを見つけ、StackOverflowリーダーのために投稿しました。次のように

方法がある:

1-輸入次のよう

import numpy as np 
from scipy.interpolate import griddata 
from scipy.interpolate import LinearNDInterpolator 

2-データを準備する:

# put the available x,y,z data as a numpy array 
points = np.array([ 
     [ 27.827, 18.53 , -30.417], [ 24.002, 17.759, -24.782], 
     [ 22.145, 13.687, -33.282], [ 17.627, 18.224, -25.197], 
     [ 29.018, 18.841, -38.761], [ 24.834, 20.538, -33.012], 
     [ 26.232, 22.327, -27.735], [ 23.017, 23.037, -29.23 ], 
     [ 28.761, 21.565, -31.586], [ 26.263, 23.686, -32.766]]) 
# and put the moisture corresponding data values in a separate array: 
values = np.array([0.205, 0.197, 0.204, 0.197, 0.212, 
        0.208, 0.204, 0.205, 0.211, 0.215]) 
# Finally, put the desired point/points you want to interpolate over 
request = np.array([[25, 20, -30], [27, 20, -32]]) 

3-取得するためのコードの最後の行を書きます補間値

方法1、usi NG griddata

print griddata(points, values, request) 
# OUTPUT: array([ 0.20448536, 0.20782028]) 

方法2LinearNDInterpolator

# First, define an interpolator function 
linInter= LinearNDInterpolator(points, values) 

# Then, apply the function to one or more points 
print linInter(np.array([[25, 20, -30]])) 
print linInter(xi) 
# OUTPUT: [0.20448536 0.20782028] 
# I think you may use it with python map or pandas.apply as well 

・ホープ、この利点すべてのいずれかを使用。

ベット

関連する問題