将Mathematica表达式无损地转换为字符串(保留在内存中的字符串,不会导出到文件中)的正确方法是什么?

我正在寻找一种文字表示形式

  • 将保留所有信息,包括保持特殊(并可能是原子的)对象不变,例如SparseArrayGraphDispatchCompiledFunction等。例如。通过此表示形式循环SparseArray应当使其保持稀疏状态(而不是将其转换为普通列表)。
  • 循环比较快(来回转换)。
  • ToString[expr, FullForm]是否足以满足要求?那ToString[expr, InputForm]呢?

    注意1:这是在尝试解决Graph中的一些错误(内部表示偶尔会损坏)时出现的。但我对上述一般问题的答案感兴趣。

    注意2:Save肯定会执行此操作,但是它会写入文件(可能可以使用流来解决此问题),并且仅写入与符号关联的定义。

    最佳答案

    如果您不打算对结果字符串执行某些字符串操作,则可以考虑使用CompressUncompress替代ToString。虽然我不知道ToString[expr,InputForm]-ToExpression循环会中断的情况,但我可以轻易地想象它们存在。 Compress解决方案似乎更健壮,因为可以保证对Uncompress编码的字符串调用的Compress可以重建原始表达式。 Compress的另一个优点是它的内存效率很高-我多次使用它来将大量数字数据保存在笔记本中,而没有将它们保存到磁盘中。

    关于wolfram-mathematica - 以文本形式保存Mathematica表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5964341/

    10-12 03:55