如何提高在Python十进制模块

问题描述 投票:1回答:1

我写使用Python模块十进制代码,但它需要被执行一段时间。

所以,我想提高它。剖析之后,我已经看到了一个功能还有待改进。

因此,我有两个问题:

  1. 是cdecimal模块一样的十进制模块?
  2. 如果没有,我怎么能在我的Mac上安装的cdecimal模块? «PIP3安装的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'
  1. 是否有可能cythonize我的代码?我可以cythonize使用十进制变量?
  2. 如果其中任何一个可能有帮助,我应该切换到NumPy的?
python decimal cython
1个回答
2
投票

作为一般规则,cmodulemodule的用C语言编写(而不是纯Python)的版本。 Python 3里会选择自动使用c版本,如果它是可用的,并且因为CPython的3.3以往,cdecimal已经内置。

所以,如果你使用CPython的(如果你不知道那是什么,那么你肯定是),你已经在使用cdecimal每次import decimal时间。

问题是,随着精密300位的工作是昂贵的。这仅仅是一个基本的限制。 NumPy的是不是那种事情进行了优化,将不利于(因为没有的内置numpy的类型有能力的话)。我怀疑用Cython将于事无补,因为它使用原生的C数据类型(同NumPy的)得到它的速度。使你的代码的运行速度,最好的办法是减少的精度。

至于如何降低精度,这就要看你的问题。例如,朴素贝叶斯模型可能涉及到小数点后一百零很小,很小的数字乘以你到任何显著之前。所以,你可能会认为你需要与多个数位的Decimal。在实践中,您可以采取的对数,而是相乘添加的,现在虽然仍然给正确的答案你的高精度需求都解决了。

© www.soinside.com 2019 - 2024. All rights reserved.