我写使用Python模块十进制代码,但它需要被执行一段时间。
所以,我想提高它。剖析之后,我已经看到了一个功能还有待改进。
因此,我有两个问题:
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'
作为一般规则,cmodule
是module
的用C语言编写(而不是纯Python)的版本。 Python 3里会选择自动使用c
版本,如果它是可用的,并且因为CPython的3.3以往,cdecimal
已经内置。
所以,如果你使用CPython的(如果你不知道那是什么,那么你肯定是),你已经在使用cdecimal
每次import decimal
时间。
问题是,随着精密300位的工作是昂贵的。这仅仅是一个基本的限制。 NumPy的是不是那种事情进行了优化,将不利于(因为没有的内置numpy的类型有能力的话)。我怀疑用Cython将于事无补,因为它使用原生的C数据类型(同NumPy的)得到它的速度。使你的代码的运行速度,最好的办法是减少的精度。
至于如何降低精度,这就要看你的问题。例如,朴素贝叶斯模型可能涉及到小数点后一百零很小,很小的数字乘以你到任何显著之前。所以,你可能会认为你需要与多个数位的Decimal
。在实践中,您可以采取的对数,而是相乘添加的,现在虽然仍然给正确的答案你的高精度需求都解决了。