Conversão cartesiana numérica mais rápida para coordenada esférica?
Eu tenho uma matriz de 3 milhões de pontos de dados de um acelerômetro de 3 eixos (XYZ) e quero adicionar 3 colunas à matriz contendo as coordenadas esféricas equivalentes (r, theta, phi). O código a seguir funciona, mas parece muito lento. Como posso me sair melhor?
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)))