Как правило, cmodule
- это версия module
, написанная на C (вместо чистого Python).Python 3 решит использовать версию c
автоматически, если она доступна, и с тех пор, как CPython 3.3 был встроен cdecimal
.
Так что, если вы используете CPython (и если вы неесли вы не знаете, что это такое, то вы определенно), вы уже используете cdecimal
каждый раз, когда вы import decimal
.
Проблема в том, что работа с точностью до 300 цифр обходится дорого.Это просто фундаментальное ограничение.Numpy не оптимизирован для такого рода вещей и не поможет (поскольку ни один из встроенных типов Numpy не способен на это).Я сомневаюсь, что Cython также поможет, так как он получает свою скорость от использования собственных типов данных C (так же, как Numpy).Лучший способ ускорить выполнение кода - это снизить точность.
Что касается снижения точности, это зависит от вашей проблемы.Например, наивная байесовская модель может включать умножение крошечных, крошечных чисел на сто нулей после десятичной точки, прежде чем вы доберетесь до чего-либо значимого.Так что вы можете подумать, что вам нужен Decimal
с таким количеством цифр.На практике вы можете взять логарифм и сложение вместо умножения, и теперь ваши потребности в точности решаются, все еще давая правильный ответ.