【发布时间】:2012-09-22 20:15:52
【问题描述】:
我有一个矩阵'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
【讨论】:
bsxfun 了吗?
或者,您可以复制您的向量并直接从矩阵中减去它
z = x-repmat(v, size(x, 1), 1);
【讨论】:
如果您使用的是 Octave 3.6.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
【讨论】: