Как повысить десятичный модуль в Python - PullRequest
0 голосов
/ 05 февраля 2019

Я написал код, используя десятичный модуль Python, но для его выполнения требуется некоторое время.

Итак, я бы хотел его улучшить.После его профилирования я увидел, что функцию можно улучшить.

Следовательно, у меня есть два вопроса:

  1. Является ли модуль cdecimal тем же самым, что и десятичный модуль?
  2. Если нет, как я могу установить модуль cdecimal на мой Mac?«Pip3 install pypi-cdecimal» выдает следующую ошибку:
    Collecting pypi-cdecimal
      Using cached             https://files.pythonhosted.org/packages/c6/3e/0e8408545ef9bca6e11956c1e78215b820f0193669afe8750f9cbaa054d1/pypi-cdecimal-2.3.tar.gz

    Complete output from command python setup.py egg_info:

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/lf/v8d843ms57dd27cslfdcbrlc0000gn/T/pip-install-wvun3np6/pypi-cdecimal/setup.py", line 426, in <module>
        ext_modules = [cdecimal_ext(MACHINE)]
      File "/private/var/folders/lf/v8d843ms57dd27cslfdcbrlc0000gn/T/pip-install-wvun3np6/pypi-cdecimal/setup.py", line 315, in cdecimal_ext
        config_vars = configure(machine, cc, py_size_t)
      File "/private/var/folders/lf/v8d843ms57dd27cslfdcbrlc0000gn/T/pip-install-wvun3np6/pypi-cdecimal/setup.py", line 230, in configure
        os.chmod("./configure", 0x1ed) # pip removes execute permissions.
    FileNotFoundError: [Errno 2] No such file or directory: './configure'

Возможно ли цитонизировать мой код?Могу ли я цифонизировать, используя десятичные переменные?

Если что-то из этого может быть полезным, мне следует переключиться на numpy?

1 Ответ

0 голосов
/ 05 февраля 2019

Как правило, cmodule - это версия module, написанная на C (вместо чистого Python).Python 3 решит использовать версию c автоматически, если она доступна, и с тех пор, как CPython 3.3 был встроен cdecimal.

Так что, если вы используете CPython (и если вы неесли вы не знаете, что это такое, то вы определенно), вы уже используете cdecimal каждый раз, когда вы import decimal.

Проблема в том, что работа с точностью до 300 цифр обходится дорого.Это просто фундаментальное ограничение.Numpy не оптимизирован для такого рода вещей и не поможет (поскольку ни один из встроенных типов Numpy не способен на это).Я сомневаюсь, что Cython также поможет, так как он получает свою скорость от использования собственных типов данных C (так же, как Numpy).Лучший способ ускорить выполнение кода - это снизить точность.

Что касается снижения точности, это зависит от вашей проблемы.Например, наивная байесовская модель может включать умножение крошечных, крошечных чисел на сто нулей после десятичной точки, прежде чем вы доберетесь до чего-либо значимого.Так что вы можете подумать, что вам нужен Decimal с таким количеством цифр.На практике вы можете взять логарифм и сложение вместо умножения, и теперь ваши потребности в точности решаются, все еще давая правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...