有可能获得不同文件的平均值,然后用它进行一些计算吗?

It is possible to obtain the mean of different files to make some computations with it after?

我有一个代码可以计算文件每一列的前五个值的平均值,然后将这些值用作所有集合的参考点。问题是现在我需要对很多文件做同样的事情。所以我需要获取每个文件的平均值,然后再次将这些值用于原始文件。我以这种方式尝试过,但出现错误。谢谢

%%% - Loading the file of each experiment
myfiles = dir('*.lvm');     % To load every file of .lvm

for i = 1:length(myfiles)   % Loop with the number of files
    files=myfiles(i).name;
    mydata(i).files = files;
    mydata(i).T = fileread(files);
    arraymean(i) = mean(mydata(i));
end

我需要计算的文件大致是这样的:

Delta_X 3.000000    3.000000    3.000000
***End_of_Header*** 
X_Value C_P1N1  C_P1N2  C_P1N3
0.000000    -0.044945   -0.045145   -0.045705
0.000000    -0.044939   -0.045135   -0.045711
3.000000    -0.044939   -0.045132   -0.045706
6.000000    -0.044938   -0.045135   -0.045702

您的第一行导致 'myfiles' 成为一个结构数组,其中包含您在键入 'help dir' 时定义的组件。特别是,所有文件的名称都包含在结构元素 myfiles(i).name 中。要显示所有文件名,请键入 myfiles.name。到目前为止,一切都很好。在 for 循环中,您使用 'fileread',但 fileread(请参阅 help fileread)returns 字符串而不是实际值。我已经将你的原型 .lvm 文件命名为 DinaF.lvm 并且我编写了一个非常非常简单的函数来读取该文件中的数据,跳过前三行,然后存储以下矩阵,假设有 4 列,在函数内部称为 T 的数组中,在主程序中称为 arrayT

这是一个修改后的脚本,其中包含一个函数 read_lvm 来读取您的 'model' lvm 文件。

第一行中的“1”告诉 Octave 脚本不仅仅是以下函数:还必须解释主程序。

1;
function T=read_lvm(filename)
  fid = fopen (filename, "r");
  %% Skip by first three lines
  for lhead=1:3
    junk=fgetl(fid);
  endfor
  %% Read nrow lines of data, quit when file is empty
  nrow=0;
  while (! feof (fid) )
    nrow=nrow + 1;
    thisline=fscanf(fid,'%f',4);
    T(nrow,1:4)=transpose(thisline);
  endwhile
  fclose (fid);
endfunction

## main program

myfiles = dir('*.lvm');     % To load every file of .lvm

for i = 1:length(myfiles)   % Loop with the number of files
  files=myfiles(i).name;
  arrayT(i,:,:) = read_lvm(files);
  columnmean(i,1:4)=mean(arrayT(i,:,:))
end

现在,与每个 .lvm 文件关联的表格值位于数组 arrayT 中,该数据集的平均值位于 columnmean(i,1:4) 中。如果 i>1,则 columnmean 将是一个数组,每行包含每个 lvm 文件的文件。 T

这个讨论离最初的问题太远了。我很乐意继续提供帮助。如果您需要更多帮助,请通过接受我的回答(单击 swish)来结束此讨论,然后提出一个标题如 'How to read .lvm files in Octave' 的新问题。这样你就会得到更多人的见解。