Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 当第1列和第2列的数字相同时,平均第3列_Matlab_Matrix_Average - Fatal编程技术网

Matlab 当第1列和第2列的数字相同时,平均第3列

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

简单一点,假设我在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;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