我有一個矩陣'x'和一個行向量'v';行向量中的元素數量與矩陣中的列數量相同。是否有任何預定義的功能用於執行以下操作?從矩陣列中減去相應的向量值
for c = 1 : columns(x)
for r = 1 : rows(x)
x(r, c) -= v(c);
end
end
我有一個矩陣'x'和一個行向量'v';行向量中的元素數量與矩陣中的列數量相同。是否有任何預定義的功能用於執行以下操作?從矩陣列中減去相應的向量值
for c = 1 : columns(x)
for r = 1 : rows(x)
x(r, c) -= v(c);
end
end
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
或者,您也可以複製你的載體和直接。如果您使用的是八度3.6從矩陣
z = x-repmat(v, size(x, 1), 1);
減去它。 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
編輯:錯誤讀取行向量的維度。這現在匹配問題。 – tmpearce
嗨!你知道在3.6.0版本中Octave引入了自動廣播功能,所以你不必再使用'bsxfun'了嗎? – carandraug
@carandraug我不知道......非常酷。我通常使用MATLAB,除非我需要使用在線倍頻程序的計算機。 – tmpearce