gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中写入文件时格式化数字

转载 作者:行者123 更新时间:2023-12-04 14:18:56 27 4
gpt4 key购买 nike

这是 this 的延续关于数字格式的问题,与我之前的 question 有关关于获取非常具体的 Mathematica 输出到文本文件。

我经常不得不在 Mathematica 中使用高精度来生成数据,但只需要相对较低的精度来进行可视化。我还想存储数据以供以后使用,所有符号名称和数组结构都完好无损。为此,我一直在使用 Save[] ,但有两个相关的问题。

  • 高精度“污染”了我的结果,多余的数字很难摆脱:
    In[1]  := b = SetPrecision[7, 50]; a = Pi/b
    Out[1] := 0.44879895051282760549466334046850041202816705705358654585356351318683091518373`50.
    In[2] := InputForm @ N[a, 6]
    Out[2] := 0.44879895051282760549466334046850041203`6.

    我真的只需要 0.448799。
  • 有时甚至指示精度的数字也被破坏,我得到类似 4.72642364528438598726943'5.9999999999999999999999 的值。我通常不需要精度和 4.72642就足够了。

  • 这两者都会对文件大小造成显着的开销,虽然硬盘存储很便宜,但在稍后将文件加载回 Mathematica 时,文件大小会产生巨大的差异。

    因此,从例如 aa 开始在不规则数组中包含 50 位任意精度数字,是否有一种内置的方法可以让我获得一个文本文件,它会读取这样的内容
    aa = {{2.0437`4, 4.7276`4, ...}, ...}

    编辑 :澄清一下,我在数字显示或跟踪数字精度或更改数字精度方面没有问题。我遇到的问题是控制如何将数字写入文件。

    使用 N , NumberForm , OutputForm , InputForm , *Form等,所有这些都不能与 Save 一起正常工作.和 Save是我能找到的唯一导出符号和数组结构的导出选项。 ExportPut*可用于更好地控制格式,但它们不包含符号(在 Export 的情况下,数组结构也会丢失)。

    最佳答案

    你真的需要像 2.0437`4 这样的东西,还是机器加倍 2.0437 就足够了?如果是后者,那么你可以做类似的事情

    N[SetPrecision[values,6]]

    强制机器 double ,将(主要)显示六位十进制数字。

    一个可能的优势是可以回读它。您的阵列现在将是机器 double ,因此可以打包。我不确定 Get 或 Import 是否会自动打包,但 Developer`ToPackedArray 会这样做。

    ---编辑 2011-02-11---

    现在我已经看到了可能出错的地方......

    这是一个示例,使用您后来的输入以及我希望具有代表性的其他一些内容。
    aa = {7.469702041097916467293771347613073888816285869`15.\
    954589770191005*^-51, 5555.22222222222222222223,
    .00000000002222222222222222222222222227777777777777, N[E, 22]^33}

    首先转换为字符串。出于保存到文件的目的,这实际上可能就是您真正想要的。我使用 NumberForm,但具有自定义格式设置功能(大部分来自文档页面)。
    In[39]:= 
    InputForm[ToString[
    NumberForm[N[aa], 6,
    NumberFormat :> (If[#3 != "", Row[{#1, "*^", #3}], #1] &)]]]

    Out[39]//InputForm=
    "{7.4697*^-51, 5555.22, 2.22222*^-11, 2.14644*^14}"

    请注意,表达式转换可以很好地解决这个问题。
    In[40]:=
    InputForm[ToExpression[
    ToString[NumberForm[N[aa], 6,
    NumberFormat :> (If[#3 != "", Row[{#1, "*^", #3}], #1] &)]]]]

    Out[40]//InputForm=
    {7.4697*^-51, 5555.22, 2.22222*^-11, 2.14644*^14}

    ---结束编辑---

    丹尼尔·利希布劳
    Wolfram 研究

    关于wolfram-mathematica - 在 Mathematica 中写入文件时格式化数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4955429/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com