4

我有一个矩阵'x'和一个行向量'v';行向量中的元素数与矩阵中的列数相同。是否有任何预定义的功能来执行以下操作?

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

3 回答 3

9
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
于 2012-09-22T20:21:55.567 回答
3

或者,您可以复制您的向量并直接从矩阵中减去它

z = x-repmat(v, size(x, 1), 1);
于 2012-09-22T21:01:27.880 回答
3

如果您使用的是 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
于 2012-09-24T07:07:26.823 回答