2012-01-23 28 views
0

我有一個2列的MATLAB矩陣,我想在其中爲每列應用單獨的函數。具體來說,我想在一列中加5,在另一列中加3。對矩陣的不同列應用不同的函數

例如,

a = 0 4 
    2 5 
    3 7 
    . . 
    . . 
    . . 

將成爲

a = 5 9 
    7 10 
    8 12 
    . . 
    . . 
    . . 

我知道我可以在相同值用一個簡單的a = a + x添加到這兩個列,但在這種情況下,我想分配不同的號碼添加到每一邊。

+1

你大概的意思是:「將成爲{5 7} ,{7 8},{8 10}。 。「 – james

+0

@CaptainProg:爲什麼不接受更通用的解決方案,它已經內置了matlab,因此更快? – tim

回答

4

你可以輕鬆地添加數字如下所示:

a = ones(5, 2) 
b = [2 5] 
c = bsxfun(@plus, a, b) 

,這將給你:

a = 
    1  1 
    1  1 
    1  1 
    1  1 
    1  1 

b = 
    2  5 

c = 
    3  6 
    3  6 
    3  6 
    3  6 
    3  6 

bsxfun也提供了更多的操作,請看這裏:http://www.mathworks.de/help/techdoc/ref/bsxfun.html

0

你可以這樣做如下

a(:,1)=a(:,1)+5; 
a(:,2)=a(:,2)+3; 

編輯: 更多通用代碼:d

function [Result]=AddColumn(A, B) 
    [aRows aCols]=size(A); 
    [bRows bCols]=size(B); 

    if(aCols~=bCols || bRows>1) 
     ErrorMessage='not Matched' 
     return; 
    end; 

    B=B' 
    X=B*ones(1,aRows); 
    X=X'; 
    Result=A+X; 
end 
+2

對於更多的列來說,編程風格不會很好,這可以通過bsxfun輕鬆完成,它是對於大數字可能更快:) – tim

+2

同意,BSXFUN是這種事情的前進方式。羞愧它有一個非顯而易見的名字,並且需要相當大的(恕我直言)適應。 – Edric

+0

@ColHeather你可以看到我的Edit for more General選項 – 2012-01-23 12:47:18

1

這樣做的一種不同的方式,這次使用repmat

>> a = [0 4; 2 5; 3 7; 1 2] 

a = 

0  4 
2  5 
3  7 
1  2 

>> a = a + repmat([5, 3], size(a, 1), 1) 

a = 

5  7 
7  8 
8 10 
6  5 
相關問題