在Matlab中计算值及其组的最快方法

在Matlab中计算值及其组的最快方法,matlab,matrix,Matlab,Matrix,我有这样一个矩阵: Group A 1 | 1 5 | 2 1 | 3 2 | 4 4 | 5 2 | 6 2 | 7 3 | 8 2 | 9 3 | 10 5 | 11 1 | 12 A Value 1 | 5 2 | 3.5 3 | 2 4 | 0 5 | 1 6 |

我有这样一个矩阵:

Group   A  
1   |   1  
5   |   2  
1   |   3  
2   |   4  
4   |   5  
2   |   6  
2   |   7  
3   |   8  
2   |   9  
3   |   10  
5   |   11  
1   |   12 
A    Value  
1   |   5  
2   |   3.5  
3   |   2  
4   |   0  
5   |   1  
6   |   2.5  
7   |   4  
8   |   3  
9   |   0  
10  |   0  
11  |   1.5  
12  |   0 
在此矩阵中,列是项目,组是列的组。我有另一个矩阵如下:

Group   A  
1   |   1  
5   |   2  
1   |   3  
2   |   4  
4   |   5  
2   |   6  
2   |   7  
3   |   8  
2   |   9  
3   |   10  
5   |   11  
1   |   12 
A    Value  
1   |   5  
2   |   3.5  
3   |   2  
4   |   0  
5   |   1  
6   |   2.5  
7   |   4  
8   |   3  
9   |   0  
10  |   0  
11  |   1.5  
12  |   0 
预期结果:

A    Value  
1   |   5  
2   |   3.5  
3   |   2  
4   |   3.25  
5   |   1  
6   |   2.5  
7   |   4  
8   |   3  
9   |   3.25  
10  |   3 
11  |   1.5  
12  |   3.5 
我从第一个矩阵中发现1,3和12有相同的群,然后为了计算12的值,我计算1和3的平均值

在第二个矩阵值列是A列的值,我想用同一组中其他项的平均值计算列中每个项的零值。 我用了这个:

for h=1:size(Matrix2,1)
    group=find(Matrix1(:,1)==Matrix2(h,1));
    group_items=find(Matrix1(:,2)==Matrix1(group,2));
    f=ismember(Matrix2(:,1),Matrix1(group_items,1));
    if Matrix2(h,2)==0
        Matrix2(h,2)=sum(Matrix2(f,2))/size(nonzeros(f),1);
    end
end
但是,当第二个矩阵较大时,这是非常缓慢的。 有更快的方法吗?

这样更好吗

 M1 = [1       1  
       5       2  
       1       3  
       2       4  
       4       5  
       2       6  
       2       7  
       3       8  
       2       9  
       3       10  
       5       11  
       1       12 ]


 M2 = [1       5  
       2       3.5  
       3       2  
       4       0  
       5       1  
       6       2.5  
       7       4  
       8       3  
       9       0  
       10      0  
       11      1.5  
       12      0 ]

Z = find(M2(:,2)==0)'
m = zeros(size(Z));
for k = 1:size(Z,2)
    r = Z(k);
    val = M2(M1(:,1)==M1(r,1),2);
    m(k) = mean(val(val~=0))
end
M_out = M2;
M_out(M2(:,2)==0,2) = m

谢谢,你能给我举个例子吗?样本的预期输出?你确定你的第二个矩阵是正确的吗?你不只是想从你的第一个矩阵中找出每组的平均值吗?例如,您在组
1
中有三个值,即
1
3
12
,因此您的第二个矩阵中的
1
不应该是
(1+3+12)/3
?12的值的预期结果是:(5+2)/2请对您的问题进行解释,说明如何获得12的值。这还不清楚。谢谢,没有使用循环的解决方案吗?可能如果你重新构造了输入(对于初学者,我会使它们成为单列向量,为什么你只需要连续数字的列…),但是循环真的没有错,除非你的Matlab已经过时5年了。首先检查此循环解决方案是否提供了适当的加速。也许这已经足够了。也许这是一个更好的方法,但它仍然很慢。