2013-11-22 132 views
2

我想要获取矩阵中的行的平均值,并从该行中的值中减去该值的平均值,并将该值成为相应的矩阵。我已经为一些循环做了这个循环,但我想从这些代码中移开。我是一位正在尝试学习如何在Matlab中完成而不使用for循环的程序员。任何帮助是极大的赞赏。获取从一个值减去矩阵中的一行的平均值,并将其放入另一个矩阵

A = [ 1 3 5; mean = 3 
     2 5 5; mean = 4    
     3 4 8; ]; mean = 5    

B = [|B_11-mean| |B_12-mean| |B_13-mean| 
    |B_21-mean| |B_22-mean| |B_23-mean| 
    |B_31-mean| |B_32-mean| |B_33-mean|]; 

B = [ 2 0 2; 
     2 1 1; 
     2 1 3; ]; 

下面是我正在使用的代码。我计划扩展到一个更大的数据集,所以我想尽可能提高效率。

[rows columns] = size(A); 
B = zeros(rows, columns); 
mean_row = mean(A.'); 
for j=1:rows 
    for i=1:columns 
    B(j,i) = abs(A(j, i) - mean_row(1,columns));abs(A(j, i) - mean_row(1,columns)); 
    end 
end 

我一直在做关于如何做到这一点没有for循环,以及如何更有效地创建了矩阵B的研究,但我一直没能得到它的权利。任何帮助表示赞赏。谢谢!

回答

4
B = abs (bsxfun (@minus, A, mean(A,2))); 

测试

>> A = [ 1 3 5; 2 5 5; 3 4 8 ] 

A = 

    1 3 5 
    2 5 5 
    3 4 8 

>> B = abs (bsxfun (@minus, A, mean(A,2))) 

B = 

    2 0 2 
    2 1 1 
    2 1 3 
+2

+1'bsxfun'一个完美的情况下! –

+0

感谢您的答案,但它不会返回我正在寻找的矩阵。请参阅最新的问题。 – user2743

+0

@ user2743您是否提供了与您展示的相同的输入内容?我非常怀疑它,因为在我的结果输出完全相同的预期。请检查测试更新的答案。 – jkshah

相关问题