使用python将无组织的3D数据插入到球形网格中

时间:2017-07-10 06:25:50

标签: python numpy scipy interpolation data-fitting

亲爱的StackOverFlow用户,

我的问题如下。

我在3D空间中有一组点(大约1.e4)。对于这些点,我知道它们的球面坐标(r,theta,phi)和每个点(rho)的相应密度值。然而,这些点没有映射到任何网格,它们在空间中只是没有组织。 我想要做的是将每个点的密度值插入到我选择的均匀球形网格中。

为此,我尝试使用scipy.interpolate SmoothSphereBivariateSpline方法。但是,我相信这种方法只能在固定半径上绘制球面坐标(虽然我不完全确定)。

所以我的第一个问题是,是否有一个python插值方法可以用于我的目的。

其次,如果SmoothSphereBivariateSpline适用于我的目的,我想问一下是否有人可以建议使用它的方法。 我现在正在尝试以下方法:

#spherical mesh data
theta_mesh_num = 3
phi_mesh_num = 3
radius_mesh_num = 100

#read data from my data file
radius = rows_0[:,0]
theta = rows_0[:,2]
phi = rows_0[:,1]
density = rows_0[:,5] + 1.e-18

#interpolator object on the unorganised data                                                                                  
interpolator_density = SmoothSphereBivariateSpline(theta, phi, radius, w=density, s=len(density))

#setup spherical grid (uniform for the moment)                                                                                
array_theta = np.linspace(0., np.pi, theta_mesh_num)
array_phi = np.linspace(0., 2*np.pi, phi_mesh_num)
array_radius = np.linspace(np.min(radius), np.max(radius), radius_mesh_num)
grid_theta, grid_phi, grid_radius = np.meshgrid(array_theta, array_phi, array_radius)

#interpolate data on the grid                                                                                                 
data_inerp = interpolator_density(array_theta,array_phi,array_radius)

使用此代码我会收到以下错误:

ValueError异常: 没有更多的结可以添加,因为额外的结将(准) 与旧的一致:太小或太大的重量 不准确的数据点。 加权最小二乘样条对应于当前的集合 节。

正如我所说,我不确定这是否正确。有人能指出我正确的方向吗?

提前致谢。

0 个答案:

没有答案