Сохранение выражений Mathematica в текстовой форме - PullRequest
5 голосов
/ 11 мая 2011

Как правильно преобразовать выражения Mathematica без потерь в строку (строка, хранящаяся в памяти, не экспортируемая в файл)?

Я ищу текстовое представление, которое

  1. сохранит всю информацию, включая сохранение особых (и, возможно, атомарных) объектов, таких как SparseArray, Graph, Dispatch, CompiledFunction и т. Д. Например. цикл SparseArray через это представление должен сохранять его разреженным (и не преобразовывать его в обычный список).
  2. относительно быстро перебирать (конвертировать туда и обратно).

Достаточно ли для этого ToString[expr, FullForm]? А как насчет ToString[expr, InputForm]?

Примечание 1: Это возникло при попытке обойти некоторые ошибки в Graph, когда внутреннее представление иногда было повреждено. Но мне интересен ответ на общий вопрос выше.

Примечание 2: Save наверняка сделает это, но записывает в файлы (возможно, это можно решить с помощью потоков) и записывает только определения, связанные с символами.

Ответы [ 2 ]

8 голосов
/ 11 мая 2011

Если вы не собираетесь выполнять какие-либо строковые манипуляции с результирующей строкой, вы можете рассмотреть Compress и Uncompress в качестве альтернативы ToString.Хотя я не знаю случаев, когда циклы ToString[expr,InputForm] - ToExpression прерываются, я легко могу представить, что они существуют.Решение Compress кажется более надежным, так как Uncompress, вызванный для строки Compress, гарантированно восстанавливает исходное выражение.Дополнительным преимуществом Compress является то, что он довольно экономно использует память - я использовал его несколько раз, чтобы сохранять большие объемы цифровых данных в блокноте, не сохраняя их на диск.

5 голосов
/ 12 мая 2011

Если в Compress возникают проблемы с циклическим отключением, ExportString и ImportString могут представлять полезную альтернативу, особенно если они используются в сочетании с родным Mathematica MX форматом:

string = ExportString[originalExpr, "MX"]
recoveredExpr = ImportString[string, "MX"]

Обратите внимание, что формат MX обычно не может передаваться между экземплярами Mathematica, но это может не иметь значения для описанного приложения в памяти.

ExpressionML - это другой формат экспорта, связанный с Mathematica, но он явно не компактный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...