Эффективные функции MATLAB cart2sph и sph2cart в Python

Таким образом я перевел функции MATLAB cart2sph и sph2cart на python.

import numpy as np

def cart2sph(x,y,z):
    azimuth = np.arctan2(y,x)
    elevation = np.arctan2(z,np.sqrt(x**2 + y**2))
    r = np.sqrt(x**2 + y**2 + z**2)
    return azimuth, elevation, r

def sph2cart(azimuth,elevation,r):
    x = r * np.cos(elevation) * np.cos(azimuth)
    y = r * np.cos(elevation) * np.sin(azimuth)
    z = r * np.sin(elevation)
    return x, y, z

Я не нашел в numpy какой-либо библиотеки, которая переводит изменение координат MATLAB, поэтому я пишу их для себя. Есть ли в numpy более эффективный способ с точки зрения времени выполнения для написания этих функций?


person overcomer    schedule 06.05.2015    source источник
comment
Вы смотрели на это? stackoverflow.com/questions/4116658 /   -  person rayryeng    schedule 06.05.2015
comment
Вы можете немного ускориться, исключив некоторые термины, которые используются более одного раза, например xy2 = x**2 + y**2; elev = atan2(z,sqrt(xy2)); r = sqrt(xy2 + z**2). Также cos(elevation) необходимо вычислить только один раз.   -  person Bas Swinckels    schedule 07.05.2015
comment
Я добавил оптимизированное решение Numexpr и некоторое сравнение времени выполнения в вопросе stackoverflow.com/a/30185737/1791279, как указано by @rayryeng Реализация sph2cart может быть выполнена с той же логикой.   -  person rth    schedule 12.05.2015