将Mathematica表达式无损转换为字符串(保存在内存中的字符串,而不是导出到文件)的正确方法是什么?
我正在寻找
的文字表示SparseArray
,Graph
,Dispatch
,CompiledFunction
等。例如。通过此表示循环SparseArray
应该保持稀疏(并且不将其转换为正常列表)。 ToString[expr, FullForm]
是否足够?那么ToString[expr, InputForm]
呢?
注意1:尝试解决Graph
中的内部表示偶尔会损坏的一些错误时出现了这种情况。但是我对上面一般性问题的答案感兴趣。
注2:Save
肯定会这样做,但它会写入文件(可能使用流来解决这个问题),并且只编写与符号相关的定义。
答案 0 :(得分:8)
如果您不打算对结果字符串执行某些字符串操作,则可以将Compress
和Uncompress
视为ToString
的替代方法。虽然我不知道ToString[expr,InputForm]
- ToExpression
周期会破坏的情况,但我很容易想象它们存在。 Compress
解决方案似乎更健壮,因为在Uncompress
上调用了Compress
- ed字符串可以保证重建原始表达式。 Compress
的另一个优点是它具有相当高的内存效率 - 我使用它几次就可以在笔记本中保存大量的数字数据,而无需将它们保存到磁盘上。
答案 1 :(得分:5)
如果Compress
出现往返问题,ExportString
和ImportString
可能会提供一个有用的替代方案 - 特别是,如果它们与Mathematica-native {{1}一起使用格式:
MX
请注意,string = ExportString[originalExpr, "MX"]
recoveredExpr = ImportString[string, "MX"]
格式通常不会在Mathematica实例之间转换,但这对于所描述的内存中应用程序可能无关紧要。
MX
是另一种与Mathematica相关的导出格式,但它明显不是紧凑格式。