Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python将数组从球面坐标插值到笛卡尔坐标?_Python_Numpy_Scipy - Fatal编程技术网

如何使用Python将数组从球面坐标插值到笛卡尔坐标?

如何使用Python将数组从球面坐标插值到笛卡尔坐标?,python,numpy,scipy,Python,Numpy,Scipy,我有一个球坐标系中的密度值数组。更具体地说,我有一个名为“形状密度”(180200200)的数组。我还有一个叫做r_coord、theta_coord和phi_coord的数组,形状(180200200)是密度数组的球坐标 我想用python将这个密度映射到笛卡尔坐标系。因此,我需要一个新的密度2,它在笛卡尔坐标x_坐标,y_坐标和z_坐标上插值。我找到了scipy.ndimage.interpolation.map_坐标,看起来很有希望,但我不知道如何让它工作 任何帮助都将不胜感激。谢谢 像这

我有一个球坐标系中的密度值数组。更具体地说,我有一个名为“形状密度”(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

请参阅,以获取有关如何执行此操作的可能指针。这里的插值是棘手的部分,而不是坐标变换(上面的注释就是指坐标变换)。imho,OP建议打开nd插值例程是正确的。