【问题标题】:Most efficient way to store scientific notation in Python and MySQL在 Python 和 MySQL 中存储科学记数法的最有效方法
【发布时间】:2017-12-16 05:53:25
【问题描述】:

所以我正在尝试存储大量数字,并且我想优化存储空间。

很多生成的数字都有相当高精度的浮点数,所以: 0.000000213213 或 323224.23125523 - 长、高内存浮动。

我想找出最好的方法,用 Python 和 MySQL(MariaDB) - 以最小的数据大小存储数字。

所以 2.132e-7 或 3.232e5,只是为了基本上以尽可能少的占用空间来存储它,并使用我可以指定的小数范围 - 但删除 n 小数后的信息。

我认为存储为 DOUBLE 是可行的方法,但我可以截断精度并节省空间吗?

我正在考虑在 Python 中进行一些数字格式化/截断,然后只是正常存储,因为 DOUBLE 可以工作 - 但实际上会节省任何空间,而不是立即存储带有 N 个小数的双精度数。

谢谢!

【问题讨论】:

    标签: python mysql types double storage


    【解决方案1】:

    所有 python 浮点数都具有相同的精度并占用相同的存储量。如果你想减少整体存储,numpy 数组应该可以解决问题。

    【讨论】:

    • 谢谢。我也在更多地研究 MySQL 方面的事情。我实际上有一个包含 5 个浮点数的数组,所以真正的技巧是找出存储在 MySQL 中的最佳方式。
    • 另外 - 将地板应用于花车的最简单方法(尽管我猜它不需要)def round_sig(x, sig=2): return round(x, sig-int(floor(log10(abs(x))))-1)
    【解决方案2】:

    另一方面,如果您试图最小化数字的表示以通过 json 或 xml 进行传输,您可以使用 f-strings。

    >>> from math import pi
    >>> pi
    3.141592653589793
    
    >>> f'{pi:3.2}.'
     '3.1.'
    >>> bigpi = pi*10e+100
    >>> bigpi
     3.141592653589793e+101
    
    >>> f'{bigpi:3.2}'
     '3.1e+101'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2019-10-24
      相关资源
      最近更新 更多