2012-01-23 17 views
0

私は各列に別々の関数を適用したい2列のMATLAB行列を持っています。具体的には、1つの列に5を追加し、もう1つに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はこのようなことのための道です。恥知らずな名前が付いていて、かなり慣れています(IMHO)。 – Edric

+0

@CheHeather you can私の編集を参照してください。一般的なオプション –

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 
関連する問題