是否可以获取不同文件的均值后进行一些计算?

时间:2019-04-15 10:04:56

标签: octave

我有一个代码来计算文件每一列的前五个值的平均值,然后将这些值用作所有集合的参考点。问题是,现在我需要对许多文件执行相同的操作。因此,我将需要获取每个文件的均值,然后将这些值再次用于原始文件。我已经尝试过这种方式,但出现错误。谢谢。

%%% - 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

1 个答案:

答案 0 :(得分:0)

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

这是一个经过修改的脚本,其中包含一个read_lvm函数,用于读取“模型” 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

这个讨论与最初的问题距离太远了。我很高兴继续提供帮助。如果您需要更多帮助,请接受我的回答以结束讨论(单击“ the”),然后用标题为“如何在Octave中读取.lvm文件”的标题提出一个新问题。这样,您将获得更多人的见解。