2012-09-22 92 views
3

我有一個矩陣'x'和一個行向量'v';行向量中的元素數量與矩陣中的列數量相同。是否有任何預定義的功能用於執行以下操作?從矩陣列中減去相應的向量值

for c = 1 : columns(x) 
    for r = 1 : rows(x) 
     x(r, c) -= v(c); 
    end 
end 

回答

8
bsxfun(@minus,x,v) 

下面是一個八度演示:

octave> x = [1 2 3;2 3 4] 
x = 

    1 2 3 
    2 3 4 

octave> v = [2 0 1] 
v = 

    2 0 1 

octave> 
octave> z=bsxfun(@minus,x,v) 
z = 

    -1 2 2 
    0 3 3 
+0

編輯:錯誤讀取行向量的維度。這現在匹配問題。 – tmpearce

+0

嗨!你知道在3.6.0版本中Octave引入了自動廣播功能,所以你不必再使用'bsxfun'了嗎? – carandraug

+0

@carandraug我不知道......非常酷。我通常使用MATLAB,除非我需要使用在線倍頻程序的計算機。 – tmpearce

3

或者,您也可以複製你的載體和直接。如果您使用的是八度3.6從矩陣

z = x-repmat(v, size(x, 1), 1); 
3

減去它。 0或更高版本,您不必使用bsxfun,因爲Octave自動執行broadcasting (請注意,這與實際使用bsxfun相同,只是在眼睛上更容易)。例如:

octave> x = [1 2 3; 2 3 4] 
x = 

    1 2 3 
    2 3 4 

octave> v = [2 0 1] 
v = 

    2 0 1 

octave> z = x - v 
z = 

    -1 2 2 
    0 3 3 
相關問題