Mathematica:对多个文件(导入,获取,..)执行相同的操作



我目前正在用Mathematica处理一些实验数据。

有几个文件,我基本上想用它们做同样的事情。目前,我只是复制并粘贴所有内容并更改文件名,如下所示:

rechn1 = Import[
   "/path/4He.H2O.MeV14460.ddd.gd.dat", "Table"];
r1 = Length[rechn1];
rechn1a = Take[rechn1, {9, r1}];
plotr1 = ListPlot[rechn1a]
rechn2 = Import[
   "/path/4He.H2O.MeV15000.ddd.gd.dat", "Table"];
r2 = Length[rechn2];
rechn2a = Take[rechn2, {9, r2}];
plotr2 = ListPlot[rechn2a]
rechn3 = Import[
   "/path/4He.H2O.MeV15670.ddd.gd.dat", "Table"];
r3 = Length[rechn3];
rechn3a = Take[rechn3, {9, r3}];
plotr3 = ListPlot[rechn3a]

等等。我不是特别精通数学,所以这对我来说似乎是一个不错的选择。复制,粘贴,更改几个数字。

但是,我现在必须处理更多这样的数据。那么,有没有办法告诉Mathematica以某种方式处理所有文件呢?也许还改变一些细节?例如,以相同的方式处理所有内容,但对绘图有不同的 PlotStyle 或标题?

找到一种方法来自动化此过程会很棒,因为我现在有很多文件要处理,复制和粘贴不再是一种选择。

谢谢!

像往常一样,Mathematica有多种方法可以做你想做的事。 以下是您可以组装成适合您的解决方案的一些部分。

您可以将 4 个函数调用

的序列替换为所有函数调用的组合,如下所示:

ListPlot[Drop[Import["/path/4He.H2O.MeV15670.ddd.gd.dat", "Table"], 9]]

这最初很难解释(对你来说,Mathematica 不会有问题),但它在下面的内容中会更容易使用,并且可以避免用不必要的临时变量弄乱你的工作空间。 请注意,我已将您的Take[expr,{9,Length[expr]}]替换为等效的Drop[expr,8],以避免对导入的数据文件调用Length

现在我们可以将其整理成一个函数,例如:

makePlot[fn_String] := ListPlot[Drop[Import[fn, "Table"], 8]]

接下来,让我们获取您需要的所有文件名。 我想您当前的工作目录是"/path"的父目录,并且调用

hefiles = FileNames["4He.*.ddd.gd.dat", {"*"}, Infinity];

将返回所有输入文件的名称列表。 让我们修改 makePlot 函数,原因稍后会变得明显:

makePlot[ix_Integer, fn_String] := myPlots[ix] = ListPlot[Drop[Import[fn, "Table"], 9]];

现在,你可以写

Do[makePlot[i,heFiles[[i]]],{i,1,Length[heFiles}]

如果我的语法正确并匹配了所有括号,这应该可以用一个语句制作您的所有情节。 它们现在将存储为 myPlots[1], myPlots[2], ... .

如果要为 ListPlot 命令设置选项,只需将makePlot的定义修改为类似

makePlot[fn_String] := ListPlot[Drop[Import[fn, "Table"], 8],plotOption-> setting, plotOption2->setting2]

或者,如果你想在你的 Mathematica 知识上取得飞跃,研究Options函数,你可以修改makePlot,将选项作为(可选)参数并传递给ListPlot

相关内容

  • 没有找到相关文章

最新更新