0

我目前正在使用 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,所以这对我来说似乎是一个不错的选择。复制、粘贴、更改一些数字。

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

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

谢谢!

4

1 回答 1

0

与 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.

于 2013-01-24T15:16:04.267 回答