矩阵的每行/列与向量的元素乘法

时间:2014-03-06 09:33:50

标签: arrays matlab matrix

我有一个矩阵,名为p_c_w,尺寸为6X7599,另一个矩阵命名为p_w,尺寸为1X7599。我希望他们的元素倍增,但我无法做到这一点。对于p_c_w的行大小和p_w的列的大小相同,我已经对p_c_w进行了转置并将其存储在anss中。我收到的错误是:订阅的分配维度不匹配。

代码如下。有人可以帮忙吗?

提前多多感谢

anss=p_c_w'
for i=1:size(anss,1)
for j=1:size(p_w,2)
    temp(j,i)=anss(i,j).*p_w(j);   
end
end

2 个答案:

答案 0 :(得分:3)

使用bsxfun

A = [ 1 2 3 4 5;
      1 2 3 4 5;
      1 2 3 4 5 ];

B = [ 1 10 100 1000 10000];

C = bsxfun(@times,A,B)  

返回:

C =

           1          20         300        4000       50000
           1          20         300        4000       50000
           1          20         300        4000       50000

A'B'

的作用相同

所以对你的情况来说:

temp = bsxfun(@times,p_c_w,p_w) 

答案 1 :(得分:0)

从R2016b版本开始,您无需使用bsxfun进行此操作。例如,以下代码将与@thewaywewalk的答案完全相同。

A = [ 1 2 3 4 5;
      1 2 3 4 5;
      1 2 3 4 5 ];

B = [ 1 10 100 1000 10000];

C = A.*B

查看doc for implicit expansions