将矩阵中的每个元素乘以向量中的每个元素

时间:2018-10-23 20:02:11

标签: arrays matlab matrix octave

我有一个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(通常更具可读性和性能)。

1 个答案:

答案 0 :(得分:4)

您只需要沿三维方向对b进行置换/重塑,然后让implicit expansion进行工作:

result = M.*reshape(b,1,1,[]);

对于较旧的Matlab版本,请使用bsxfun

result = bsxfun(@times, M, reshape(b,1,1,[]));