Matlab 文本文件中的排序和取平均值
我有两个这样的文本文件:Matlab 文本文件中的排序和取平均值,matlab,Matlab,我有两个这样的文本文件: Size Average 1 3.5 3 5 5 6 7 6 File1.txt Size Iterations 3 45 5 6 7 50 1 34 5 56 1 4 Size Iterations 3 5 5 6 7 6 1 3 5 6 1 4
Size Average
1 3.5
3 5
5 6
7 6
File1.txt
Size Iterations
3 45
5 6
7 50
1 34
5 56
1 4
Size Iterations
3 5
5 6
7 6
1 3
5 6
1 4
Size Iterations
1 34
1 4
3 45
5 6
5 56
7 50
Size Iterations
1 3
1 4
3 5
5 6
5 6
7 6
File2.txt
Size Iterations
3 45
5 6
7 50
1 34
5 56
1 4
Size Iterations
3 5
5 6
7 6
1 3
5 6
1 4
Size Iterations
1 34
1 4
3 45
5 6
5 56
7 50
Size Iterations
1 3
1 4
3 5
5 6
5 6
7 6
我想先做两件事:
1) 根据大小对这两个文件进行排序
File1.txt
Size Iterations
3 45
5 6
7 50
1 34
5 56
1 4
Size Iterations
3 5
5 6
7 6
1 3
5 6
1 4
Size Iterations
1 34
1 4
3 45
5 6
5 56
7 50
Size Iterations
1 3
1 4
3 5
5 6
5 6
7 6
File2.txt
Size Iterations
3 45
5 6
7 50
1 34
5 56
1 4
Size Iterations
3 5
5 6
7 6
1 3
5 6
1 4
Size Iterations
1 34
1 4
3 45
5 6
5 56
7 50
Size Iterations
1 3
1 4
3 5
5 6
5 6
7 6
2) 一旦根据大小对文件进行了排序,那么我想创建一个新文件,并存储与每个唯一大小编号对应的所有迭代的平均值
像这样:
Size Average
1 3.5
3 5
5 6
7 6
我对MATLAB是新手。请告诉我实现上述任务需要遵循哪些功能。您可以使用以下代码:
%1-Sort everything
s1 = tdfread('File1.txt',' ');%Three space separation
[sorted_s1_size,sorted_s1_idx]=sort(s1.size,'ascend');
sorted_s1_iterations = s1.iterations(sorted_s1_idx);
s2 = tdfread('File2.txt',' ');
[sorted_s2_size,sorted_s2_idx]=sort(s2.size,'ascend');
sorted_s2_iterations = s2.iterations(sorted_s2_idx);
%2-Get the average
sizes = [sorted_s1_size;sorted_s2_size];
iterations = [sorted_s1_iterations,sorted_s2_iterations];
unique_sizes = unique(sizes);
avg_iterations = zeros(1,length(unique_sizes);
for i=1:length(unique_sizes)
w_size = unique_sizes(i);
w_idx=find(sizes==w_size);
avg_iterations(i) = mean(iterations);
end
%4-Write the file
fid = fopen('output.txt','w');
for k=1:length(unique_sizes)
fprintf(fid,'.2f\t%.2f\n',unique_sizes(i),avg_iterations(i));
end
fclose(fid);
您可以通过删除两个排序操作对其进行优化(因为
unique
也会按id排序)。我假定file1.txt和file2.txt中的第一个原始文件不存在。我指的是那些包含ASCII字符的行
clear all
a = load('file1.txt');
b = load('file2.txt');
c = [a;b]; % appends file2 below file1
[aa I] = sort(c(:,1)); % you can find sorted IDs in I
ids = unique(c(I,1));
ave = zeros(1,ids);
for i=1:length(ids)
currentIds = I(c(I,1) == ids(i)); %boolean indexing in sorted IDs
ave(i) = mean(c(currentIds,2));
end
disp([ids,ave'])
我不知道如何根据大小和迭代次数生成平均值!!或者他们是否相关!!行选项卡是否分开?@Mohammad我想取每个唯一大小编号对应的所有迭代的平均值,这将是(34+4+3+4)/4,等于11.5。你最好编辑你的问题。@phyrox他们是三个空格分开的。效果很好。你能解释一下在这段代码中平均值是如何计算的吗?这很简单!在for循环内部,我们有:一组属于i_大小的索引由包含排序索引的向量i指定。现在,currentIds中存在的第i个大小的行的索引引导我们计算平均值。这可以通过索引c矩阵实现。