Matlab 当第1列和第2列的数字相同时,平均第3列
简单一点,假设我在matlab中有一个10x3的矩阵。每行前两列中的数字表示x和y(位置),第三列中的数字表示相应的值。例如,Matlab 当第1列和第2列的数字相同时,平均第3列,matlab,matrix,average,Matlab,Matrix,Average,简单一点,假设我在matlab中有一个10x3的矩阵。每行前两列中的数字表示x和y(位置),第三列中的数字表示相应的值。例如,[1 4 12]显示x=1和y=4中函数的值等于12。我在不同的行中也有相同的x和y,我想平均具有相同x,y的值。并用平均值替换所有的 例如: A = [1 4 12 1 4 14 1 4 10 1 5 5 1 5 7]; 我想要 B = [1 4 12 1 5 6] 我真的很感谢你的帮助 谢谢 阿里像这样吗 A
[1 4 12]
显示x=1和y=4中函数的值等于12。我在不同的行中也有相同的x和y,我想平均具有相同x,y的值。并用平均值替换所有的
例如:
A = [1 4 12
1 4 14
1 4 10
1 5 5
1 5 7];
我想要
B = [1 4 12
1 5 6]
我真的很感谢你的帮助
谢谢
阿里像这样吗
A = [1 4 12;1 4 14;1 4 10; 1 5 5;1 5 7];
[x,y] = consolidator(A(:,1:2),A(:,3),@mean);
B = [x,y]
B =
1 4 12
1 5 6
位于文件交换上。使用内置函数:
sparsemean = accumarray(A(:,1:2), A(:,3).', [], @mean, 0, true);
[i,j,v] = find(sparsemean);
B = [i.' j.' v.'];
for
循环内的步骤使用逻辑索引查找与循环中当前xy对匹配的行的平均值。使用unique
获取唯一行,使用返回的索引数组查找应平均的行,并要求accumarray
执行平均部分:
[C,~,J]=unique(A(:,1:2), 'rows');
B=[C, accumarray(J,A(:,3),[],@mean)];
以你为例
>> [C,~,J]=unique(A(:,1:2), 'rows')
C =
1 4
1 5
J =
1
1
1
2
2
C
包含唯一的行,并且J
显示原始矩阵中的哪些行对应于C
中的行
>> accumarray(J,A(:,3),[],@mean)
ans =
12
6
返回所需的平均值和
>> B=[C, accumarray(J,A(:,3),[],@mean)]
B =
1 4 12
1 5 6
就是答案。请注意,您不需要在该循环中进行测试。unique返回一些可以帮助您解决问题的额外信息。
>> B=[C, accumarray(J,A(:,3),[],@mean)]
B =
1 4 12
1 5 6