在mathematica中处理目录中的大量文件

时间:2018-07-09 13:36:03

标签: for-loop memory memory-management wolfram-mathematica

我在一个目录中保存了大量数据文件(.csv)。我现在想适合并评估每个文件的几个参数。由于此目录中有300.000个文件,因此mathematica无法运行我的脚本。我尝试的第一次尝试是将目录设置为此文件夹,然后尝试通过“ For-loop”单独导入每个文件(对于i = 1,i <= imax,i ++ ,其中imax是文件中的文件),进行整体拟合评估等,然后再次开始循环并导入第二个文件,以节省内存。不幸的是,这种方法根本行不通,mathematica几乎立即崩溃了。

所以,我的问题是,现在可以在不耗尽内存的情况下以某种方式处理单个目录中的大量文件吗?

1 个答案:

答案 0 :(得分:0)

下面的方法将来自所有CSV的所有数据加载到名为data的函数变量中。因此,如果您有名为file1.csvfile2.csv的CSV,它们的数据将被加载到名为data["file1.csv"]data["file2.csv"]的变量中。然后,例如,将每个CSV的第一列中的数据读取到一个名为xvalues的变量中,并将每个CSV的第二列中的数据读取到一个名为yvalues的变量中。

SetDirectory["C:\\Users\\yourname\\datadirectory"];
files = FileNames["*.csv"];
(data[#] = Import[#]) & /@ files;

xvalues = yvalues = {};

(xvalues = Join[xvalues, data[#][[All, 1]]]) & /@ files;
xvalues = Flatten[xvalues];

(yvalues = Join[yvalues, data[#][[All, 2]]]) & /@ files;
yvalues = Flatten[yvalues];

然后可以计算出适合度。

fit = Fit[Transpose[{xvalues, yvalues}], {1, x}, x]