【问题标题】:Element wise multiplication of every row/column of a matrix with a vector矩阵的每一行/列与向量的元素乘法
【发布时间】:2014-03-06 09:33:50
【问题描述】:

我有一个矩阵,名为 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

【问题讨论】:

  • 使用p_w(1,j) 而不是p_w(j)

标签: arrays matlab matrix


【解决方案1】:

使用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) 

【讨论】:

  • 谢谢@thewaywewalk 现在使用 bsxfun 可以工作了 :)
【解决方案2】:

从 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多