我正在寻找一种方法来重写Mathematica函数,该函数读取数值的文本文件(大小为几百Mb)并从中创建一个Mathematica数组。我使用ReadList来读取文件,这个速度和人们预期的一样快,但是我的问题是如何将这个数组恢复到这个函数之外的变量而不复制它或者类似的东西?
目前我的功能类似于
LoadData[vars_...]:=Module[{localvars_...},...Return[giant array];];
并尝试将巨型数组分配给这样的变量:
table = LoadData[vars_...]
然而,从“巨型阵列”中取出数组并将其放入“表格”所花费的时间比文件读取本身要长。显然,整件事被复制或愚蠢;如果我去了更大的数据,它可能会溢出内存。
如何防止这种情况发生?如何让Mathematica重命名数组而不是复制所有数据?如果它是相关的,该函数在一个单独的包中定义到我正在使用它的那个。
解决:
啊,谢谢belisarius,simple question on passing data between functions确实给了我需要的提示,即设置
Attributes[LoadData]={HoldFirst}
包中的似乎使该功能表现得合理。
答案 0 :(得分:0)
您还可以将变量设置为Dynamic并在函数内更新它 - 将数据直接加载到其中。但是,对于这个原因,Unevaluated也同样有效。