有可能获得不同文件的平均值,然后用它进行一些计算吗?
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' 的新问题。这样你就会得到更多人的见解。
我有一个代码可以计算文件每一列的前五个值的平均值,然后将这些值用作所有集合的参考点。问题是现在我需要对很多文件做同样的事情。所以我需要获取每个文件的平均值,然后再次将这些值用于原始文件。我以这种方式尝试过,但出现错误。谢谢
%%% - 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' 的新问题。这样你就会得到更多人的见解。