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矩阵实现。