Matlab 从矩阵列中减去相应的向量值

Matlab 从矩阵列中减去相应的向量值,matlab,matrix,octave,Matlab,Matrix,Octave,我有一个矩阵'x'和一个行向量'v';行向量中的元素数与矩阵中的列数相同。是否有用于执行以下操作的预定义功能 for c = 1 : columns(x) for r = 1 : rows(x) x(r, c) -= v(c); end end 这是一个八度音阶的演示: octave> x = [1 2 3;2 3 4] x = 1 2 3 2 3 4 octave> v = [2 0 1] v = 2

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

for c = 1 : columns(x)
    for r = 1 : rows(x)
        x(r, c) -= v(c);
    end
end
这是一个八度音阶的演示:

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

已编辑:误读行向量的维度。这与问题相符。嗨!你知道吗,在3.6.0版本中,倍频程引入了自动广播,这样你就不必再使用
bsxfun
?@carandraug我不知道。。。很酷。我通常使用MATLAB,除非我不在计算机旁,需要在线倍频程实用程序。
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