以文本形式保留Mathematica表达式

时间:2011-05-11 12:37:30

标签: wolfram-mathematica

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

我正在寻找

的文字表示
  1. 将保留所有信息,包括保持特殊(可能是原子)对象,例如SparseArrayGraphDispatchCompiledFunction等。例如。通过此表示循环SparseArray应该保持稀疏(并且不将其转换为正常列表)。
  2. 循环相对较快(来回转换)。
  3. ToString[expr, FullForm]是否足够?那么ToString[expr, InputForm]呢?

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

    注2:Save肯定会这样做,但它会写入文件(可能使用流来解决这个问题),并且只编写与符号相关的定义。

2 个答案:

答案 0 :(得分:8)

如果您不打算对结果字符串执行某些字符串操作,则可以将CompressUncompress视为ToString的替代方法。虽然我不知道ToString[expr,InputForm] - ToExpression周期会破坏的情况,但我很容易想象它们存在。 Compress解决方案似乎更健壮,因为在Uncompress上调用了Compress - ed字符串可以保证重建原始表达式。 Compress的另一个优点是它具有相当高的内存效率 - 我使用它几次就可以在笔记本中保存大量的数字数据,而无需将它们保存到磁盘上。

答案 1 :(得分:5)

如果Compress出现往返问题,ExportStringImportString可能会提供一个有用的替代方案 - 特别是,如果它们与Mathematica-native {{1}一起使用格式:

MX

请注意,string = ExportString[originalExpr, "MX"] recoveredExpr = ImportString[string, "MX"] 格式通常不会在Mathematica实例之间转换,但这对于所描述的内存中应用程序可能无关紧要。

MX是另一种与Mathematica相关的导出格式,但它明显不是紧凑格式。