我有一个mxn
矩阵M
和一个向量b
(长度c
)。有没有一种方法可以将M
的每个元素乘以vector的每个元素以获得mxnxc
的结果,即result(1, 1, :)
是M(1, 1) .* b
?
对于矢量,使用逐元素运算符有效。例如。如果m = [a; b]
和n = [c d]
,则a .* b
给出
a*c a*d
b*c b*d
但是对于矩阵,这将根据n
是列矢量还是行矢量在矩阵上按列或按行执行逐元素操作。例如。如果m = [ a b; c d ]
和n = [ e f ]
,则m .* n
给出
a*e b*f
c*e d*f
我正在寻找的结果是result(:, :, 1) =
a*e b*e
c*e d*e
和result(:, :, 2) =
a*f b*f
c*f d*f
我知道可以使用循环来实现
result = zeros(m, n, c);
for i = 1:b
result(:, :, i) = M .* b(i);
end
但是我想知道是否有更简单的方法,例如更多MATLAB/Octave
(通常更具可读性和性能)。
答案 0 :(得分:4)
您只需要沿三维方向对b
进行置换/重塑,然后让implicit expansion进行工作:
result = M.*reshape(b,1,1,[]);
对于较旧的Matlab版本,请使用bsxfun
:
result = bsxfun(@times, M, reshape(b,1,1,[]));