我有一个代码来计算文件每一列的前五个值的平均值,然后将这些值用作所有集合的参考点。问题是,现在我需要对许多文件执行相同的操作。因此,我将需要获取每个文件的均值,然后将这些值再次用于原始文件。我已经尝试过这种方式,但出现错误。谢谢。
%%% - 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
答案 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文件”的标题提出一个新问题。这样,您将获得更多人的见解。