2017-03-13 49 views
0

我想知道如何去加/減我的數據的第一個值到列的其餘部分,或者從列的其餘部分減去第一個值,數據的行會是0將列的第一個值加上或減去列的其餘部分(MATLAB)

舉例來說,這樣的:

A = [13.2 12.4 -11.7 6.3 -4.0 
    14.2 13.1 -9.2 8.2 -4.1 
    14.4 14.5 -7.6 10.0 -5.1]; 

將變爲:

0  0  0  0  0 
1  0.7 2.5 1.9 0.1 
1.2 2.1 4.1 3.7 1.1 

我想,我可以檢查的第一個數字是正/負用符號()並選擇是否使用ifelse語句來添加或減去此值,但我不確定如何將其應用到每個列(或者如果這是最好的方法!)。

非常感謝提前。

+0

我想你在最後一欄中出現了一個錯誤,或者你想要絕對值? – m7913d

+0

你需要的是:'bsxfun(@ minus,A,A(1,:))' – Adiel

回答

2

您可以選擇第一行並從矩陣中減去它。

A = A - A(1, :) 

或者對舊版本的matlab:

A = A - repmat(A(1, :), size(A, 1), 1) 
3

你實際上需要元素按件工作,爲bsxfun狀態的定義。你的情況應該是:

A = [13.2 12.4 -11.7 6.3 -4.0 
    14.2 13.1 -9.2 8.2 -4.1 
    14.4 14.5 -7.6 10.0 -5.1]; 

B=bsxfun(@minus,A,A(1,:)) 
B = 

     0   0   0   0   0 
    1.0000 0.7000 2.5000 1.9000 -0.1000 
    1.2000 2.1000 4.1000 3.7000 -1.1000 

這是你的問題描述的結果,但對於要添加的例子中,我假設你想要的絕對值,所以你需要添加abs

B=abs(bsxfun(@minus,A,A(1,:))) 
B = 

     0   0   0   0   0 
    1.0000 0.7000 2.5000 1.9000 0.1000 
    1.2000 2.1000 4.1000 3.7000 1.1000 
相關問題