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



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

所以,我现在的问题是,我能否以某种方式处理单个目录中的大量文件而不会耗尽内存?

下面的方法将所有CSV中的所有数据加载到名为data的函数变量中。 因此,如果您有名为file1.csv的 CSV 并file2.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]

最新更新