Я ищу способ переписать функцию Mathematica, которая читает текстовый файл с числовыми значениями (несколько сотен Мб) и создает из него массив Mathematica. Я использую ReadList для чтения файла, и это происходит так быстро, как можно было бы ожидать, но моя проблема заключается в том, как заставить этот массив вернуться к переменной вне этой функции без копирования или чего-то глупого подобного?Функция Mathematica, которая возвращает очень большой массив, очень медленная
В настоящее время моя функция записывается как
LoadData[vars_...]:=Module[{localvars_...},...Return[giant array];];
и попытаться присвоить гигантский массив переменной, как это:
table = LoadData[vars_...]
Однако время, проведенное с массив из «гигантского массива» и поместить его в «таблицу» длиннее, чем файл, сам прочитанный. Ясно, что все это копируется или что-то глупое; он, вероятно, переполнит память, если я перейду к гораздо большему количеству данных.
Как я могу предотвратить это? Как я могу заставить Mathematica просто переименовать массив, а не копировать все данные? В случае, если это имеет значение, функция определяется в отдельном пакете в том, где я его использую.
РЕШИТЬ:
Ааа, спасибо Велизарий, simple question on passing data between functions действительно дает мне подсказку, что нужно, то есть настройки
Attributes[LoadData]={HoldFirst}
в пакете, как сделать функцию вести себя разумно.
Как вы определили, что проблема с копией была проблемой? – rcollyer
Связанный http://stackoverflow.com/questions/7376032/simple-question-on-passing-data-between-functions –
Я поставил оператор печати непосредственно перед вызовом Return в функции и сразу после присвоения «таблице «в родительском ноутбуке, и потребовалось очень много времени, чтобы перейти от одного к другому. –