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