我有一个矩阵'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
或者,您可以复制您的向量并直接从矩阵中减去它
z = x-repmat(v, size(x, 1), 1);
如果您使用的是 Octave 3.6.0 或更高版本,则不必使用,bsxfun
因为 Octave 执行自动广播(请注意,这与实际使用相同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