2013-02-12 5 views
4

필자는 구형 좌표에 밀도 값 배열을 가지고 있습니다. 좀 더 구체적으로는 밀도가 180,200,200 인 배열이 있습니다. 또한 r_coord, theta_coord 및 phi_coord라는 배열이 밀도 배열의 구 좌표가되는 모양 (180,200,200)을 가지고 있습니다.배열을 구형에서 직교 좌표로 파이썬으로 보간하려면 어떻게해야합니까?

이 밀도를 파이썬을 사용하여 데카르트 좌표로 매핑하고 싶습니다. 따라서 새로운 밀도 2가 필요합니다.이 밀도는 직교 좌표 x_coord, y_coord 및 z_coord에 보간됩니다. 유망스럽게 보이는 scipy.ndimage.interpolation.map_coordinates를 찾았지만 어떻게 작동시키는 지 알 수는 없습니다.

도움을 주시면 감사하겠습니다. 감사.

+2

자세한 방법은 http://stackoverflow.com/questions/4116658/faster-numpy-cartesian-to-spherical-conordinate-conversion을 참조하십시오. – hd1

+1

여기서 보간법은 좌표 변환이 아닌 까다로운 부분입니다 (위의 주석이 참조하는 것임). imho, OP는 nd 보간 루틴을 제안하는 것이 옳습니다. – tom10

답변

1

이런 식으로 뭔가 작업을해야합니다 :

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 다차원 보간,
  • 당신에게 그것을 전달할 때 xyzrtp 좌표 변환 보간 자.
관련 문제