2013-11-22 160 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

相關問題