Matlab 从矩阵列中减去相应的向量值
我有一个矩阵'x'和一个行向量'v';行向量中的元素数与矩阵中的列数相同。是否有用于执行以下操作的预定义功能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
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