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

Вот лучший способ, который я нашел, чтобы добавить пользователей только для чтения (используя PostgreSQL 9.0 или новее):

$ sudo -upostgres psql postgres
postgres=# CREATE ROLE readonly WITH LOGIN ENCRYPTED PASSWORD '<USE_A_NICE_STRONG_PASSWORD_PLEASE';
postgres=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

Затем войдите на все связанные машины (master + чтение-раб (ы) / горячее резервирование (и) и т. д.) и выполнение:

$ echo "hostssl <PUT_DBNAME_HERE> <PUT_READONLY_USERNAME_HERE> 0.0.0.0/0 md5" | sudo tee -a /etc/postgresql/9.2/main/pg_hba.conf
$ sudo service postgresql reload
29
задан Saullo G. P. Castro 12 May 2013 в 21:18
поделиться

1 ответ

Это похоже на ответ Джастина Пила , но с использованием только numpy и использованием его встроенной векторизации:

import numpy as np

def appendSpherical_np(xyz):
    ptsnew = np.hstack((xyz, np.zeros(xyz.shape)))
    xy = xyz[:,0]**2 + xyz[:,1]**2
    ptsnew[:,3] = np.sqrt(xy + xyz[:,2]**2)
    ptsnew[:,4] = np.arctan2(np.sqrt(xy), xyz[:,2]) # for elevation angle defined from Z-axis down
    #ptsnew[:,4] = np.arctan2(xyz[:,2], np.sqrt(xy)) # for elevation angle defined from XY-plane up
    ptsnew[:,5] = np.arctan2(xyz[:,1], xyz[:,0])
    return ptsnew

Обратите внимание, что, как предложено в комментарии, я изменил определение угла места от вашей первоначальной функции. На моей машине, тестируя с pts = np.random.rand(3000000, 3), время изменилось с 76 секунд до 3,3 секунд. У меня нет Cython, поэтому я не смог сравнить время с этим решением.

31
ответ дан 28 November 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: