我有一个xyz坐标的numpy数组。除了一个以外,所有代表地面。我想将地平面插值到一个表面,并找到一个点的“ Surface”上方的高度:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
arr = np.array([[0,0,0,2,2,4,5,5,2],
[0,3,5,0,5,2,0,5,2],
[80,70,50,90,40,75,60,46,220]])
x,y,z = arr
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', c= 'red')
plt.show()
我正在寻找此类问题的名称,而不是解决方案。我不知道要搜索什么才能尝试解决方案。
#Rebuild arr without the point which is to be measured:
arr = np.array([[0,0,0,2,2,4,5,5],
[0,3,5,0,5,2,0,5],
[80,70,50,90,40,75,60,46]])
x,y,z = arr
groundlvl = scipy.interpolate.LinearNDInterpolator(list(zip(x,y)),z)
groundlvl(2,2)
#Outputs
array(76.)
答案 0 :(得分:1)
由于地面数据似乎不在网格中,因此可以使用 LinearNDInterpolator。它使用Delaunay三角剖分,并且非常健壮。
我可以推荐的另一种算法是Rbf (radial basis function)。
两者都可以使用scipy并可以处理n维数据。
使用这两个值之一对地面进行插值,然后将差值计算为单个值。