Более быстрое преобразование декартовых координат в сферические?

У меня есть массив из 3 миллионов точек данных из 3-осевого акселерометра (XYZ), и я хочу добавить 3 столбца в массив, содержащий эквивалентные сферические координаты (r, theta, phi). Следующий код работает, но кажется слишком медленным. Как я могу сделать лучше?

import numpy as np
import math as m

def cart2sph(x,y,z):
    XsqPlusYsq = x**2 + y**2
    r = m.sqrt(XsqPlusYsq + z**2)               # r
    elev = m.atan2(z,m.sqrt(XsqPlusYsq))     # theta
    az = m.atan2(y,x)                           # phi
    return r, elev, az

def cart2sphA(pts):
    return np.array([cart2sph(x,y,z) for x,y,z in pts])

def appendSpherical(xyz):
    np.hstack((xyz, cart2sphA(xyz)))

Ответы на вопрос(4)

Ваш ответ на вопрос