如何使用Python将数组从球面坐标插值到笛卡尔坐标?
我有一个球坐标系中的密度值数组。更具体地说,我有一个名为“形状密度”(180200200)的数组。我还有一个叫做r_coord、theta_coord和phi_coord的数组,形状(180200200)是密度数组的球坐标 我想用python将这个密度映射到笛卡尔坐标系。因此,我需要一个新的密度2,它在笛卡尔坐标x_坐标,y_坐标和z_坐标上插值。我找到了scipy.ndimage.interpolation.map_坐标,看起来很有希望,但我不知道如何让它工作如何使用Python将数组从球面坐标插值到笛卡尔坐标?,python,numpy,scipy,Python,Numpy,Scipy,我有一个球坐标系中的密度值数组。更具体地说,我有一个名为“形状密度”(180200200)的数组。我还有一个叫做r_coord、theta_coord和phi_coord的数组,形状(180200200)是密度数组的球坐标 我想用python将这个密度映射到笛卡尔坐标系。因此,我需要一个新的密度2,它在笛卡尔坐标x_坐标,y_坐标和z_坐标上插值。我找到了scipy.ndimage.interpolation.map_坐标,看起来很有希望,但我不知道如何让它工作 任何帮助都将不胜感激。谢谢 像这
任何帮助都将不胜感激。谢谢 像这样的方法应该会奏效:
import scipy.interpolate
rflat=scipy.array( r_coord.flat )
tflat=scipy.array( theta_coord.flat )
pflat=scipy.array( phi_coord.flat )
coordpoints=scipy.concatenate( [ rflat[:, scipy.newaxis], tflat[:,scipy.newaxis], pflat[:,scipy.newaxis] ] , axis=1 )
rtpinterpolator=scipy.interpolate.linearNDInterpolate( coordppoints, density.flat )
def xyz2rtp( x,y,z):
r=scipy.sqrt( x**2+y**2+z**2)
t=scipy.acos( z/r )
p=scipy.atan2( y, x )
return (r,t,p)
# now you can get the interpolated value for any (x,y,z) coordinate you want.
val=rtpinterpolator( xyz2rtp( x,y,z) )
要点:
- 使用现有的scipy多维插值
- 将
坐标传递到插值器时,将其转换为xyz
rtp