n-сферическая координатная система с декартовой системой координат

Существует ли эффективный способ изменения между декартовой системой координат и n-сферической ? Преобразование выглядит следующим образом: введите описание изображения здесь

Следующий мой код, но я хочу избавиться от цикла:

import numpy as np import scipy.sparse def coord_transform_n(r,alpha): """alpha: the n-2 values between [0,\pi) and last one between [0,2\pi) """ x=[] for i in range(alpha.shape[0]): x.append(r*np.prod(np.sin(alpha[0:i]))*np.cos(alpha[i])) return np.asarray(x) print coord_transform_n(1,np.asarray(np.asarray([1,2]))) 

2 Solutions collect form web for “n-сферическая координатная система с декартовой системой координат”

Ваш исходный код может быть ускорен с запоминанием промежуточного продукта sin , т. Е.

 def ct_dynamic(r, alpha): """alpha: the n-2 values between [0,\pi) and last one between [0,2\pi) """ x = np.zeros(len(alpha) + 1) s = 1 for e, a in enumerate(alpha): x[e] = s*np.cos(a) s *= np.sin(a) x[len(alpha)] = s return x*r 

Но все же теряет скорость до подхода на основе numpy

 def ct(r, arr): a = np.concatenate((np.array([2*np.pi]), arr)) si = np.sin(a) si[0] = 1 si = np.cumprod(si) co = np.cos(a) co = np.roll(co, -1) return si*co*r >>> n = 10 >>> c = np.random.random_sample(n)*np.pi >>> all(ct(1,c) == ct_dynamic(1,c)) True >>> timeit.timeit('from __main__ import coord_transform_n as f, c; f(2.4,c)', number=10000) 2.213547945022583 >>> timeit.timeit('from __main__ import ct_dynamic as f, c; f(2.4,c)', number=10000) 0.9227950572967529 >>> timeit.timeit('from __main__ import ct as f, c; f(2.4,c)', number=10000) 0.5197498798370361 

Мое предложение: Соберите синус в одном векторе, используйте cumprod на нем, затем умножьте каждый с его косинусом.

  • Сохранить .dta файлы в python
  • Как объединить массив numpy и текстовый столбец и экспортировать в csv
  • Как преобразовать отрицательные элементы в ноль без цикла?
  • Как удалить все остальные элементы массива в python? (Обратный np.repeat ()?)
  • Извлечь индексы массива, которые содержат определенное значение
  • Ускорение ближайшей точки на гиперболическом параболоидном алгоритме
  • Python: как избежать numpy RuntimeWarning в определении функции?
  • статистический анализ в реальном времени
  • Numpy, где функция множественных условий
  • Предварительная обработка тензора тензора в Numpy
  • Генерация трехмерного гауссовского распределения в Python
  • Python - лучший язык программирования в мире.