是否有 python function/library 从网格数据创建字段?

Is there a python function/library to create a field from gridded data?

我有在 3D 网格上指定的数据,例如:

import numpy as np
f = np.random.rand(4, 4, 4)

有没有办法为任意点(即不在网格上)获取此数据的(插值)值? interpolation 文档显示您可以显示此类数据,但我不知道如何获取 value f(arbitrary_point)。谢谢

scipy.interpolate.griddata允许N维插值。下面是一个 3D 示例,其中我在网格上计算了 f(r) = cos(r)^2,然后对网格数据进行了插值。可以在下面绘制网格数据或插值数据以验证插值是否正确:

%matplotlib inline
from __future__ import division
import numpy as np
from scipy import interpolate
from math import *
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

#define grid points and f(r) = cos^2(r) and format for interpolation: 
N = 10;
x_range, y_range, z_range = [np.linspace(0,pi,N), np.linspace(0,pi,N), np.linspace(0,pi,N)];
x_grid,y_grid,z_grid = np.meshgrid(x_range,y_range,z_range);
xi, yi, zi = x_grid.ravel(), y_grid.ravel(), z_grid.ravel();
xi, yi, zi = xi[:], yi[:], zi[:];
f = np.cos((xi**2 + yi**2 + zi**2)**(1/2))**2;
points = np.dstack([xi, yi, zi]);
points = points[0,:,:];

#create random points and interpolate f(r):
[x_rand, y_rand, z_rand] = [pi*np.random.rand(N**3), pi*np.random.rand(N**3), pi*np.random.rand(N**3)]
random_points = np.dstack([x_rand, y_rand, z_rand])
random_points = random_points[0,:,:]

f_interpolated = interpolate.griddata(points, f, random_points, method='linear');

#PLOT THE RESULTS: 
fig = plt.figure()
ax = fig.gca(projection='3d')

#_____________PLOT GRID OR INTERPOLATED DATA ______________
surf = ax.scatter(xi,yi,zi,c=f,s=20,alpha=.8)
surf = ax.scatter(x_rand,y_rand,z_rand,c=f_interpolated)

fig.colorbar(surf, aspect=16)

plt.show()