首页 文章

将矩阵A的每行中的每个值乘以矩阵B中特定行的每个对应值

提问于
浏览
3

我有一个 A=[m,n] 矩阵和一个 B=[n,l] 矩阵 .

A =
[1     2     3   
 4     5     6   
 7     8     9   
 10    11    12]

为简单起见,我们假设是 l=1 ,所以 B 实际上是一个向量 B=[n,1]

B =   [100    10     1]

我想将 A 的每一行中的所有值乘以相应的 B 值 - 列方式 .

我知道如何“手动”:

C=[A(:,1)*B(:,1), A(:,2)*B(:,2), A(:,3)*B(:,3)]

这是我想要的结果:

C = [100          20           3  
     400          50           6  
     700          80           9  
     1000         110          12]

不幸的是,我的真实生活矩阵有点大,例如( D=[888,1270] )所以我正在寻找更聪明/更快的方法来做到这一点 .

2 回答

  • 2

    Pre R2016b:

    C=bsxfun(@times,A,B)
    
    C =
         100          20           3
         400          50           6
         700          80           9
        1000         110          12
    

    R2016b及更高版本:

    在MATLAB®R2016b及更高版本中,您可以直接使用运算符而不是 bsxfun ,因为运算符独立支持数组的隐式扩展 .

    C = A .* B
    
  • 6

    如果是 I > 1 ,则必须首先使用 permute 重新排序 B 的尺寸,

    >> B = [100 10 1; 1 10 100];
    >> C = bsxfun(@times, A, permute(B, [3 2 1]));
    >> C
    
    C(:,:,1) =
    
             100          20           3
             400          50           6
             700          80           9
            1000         110          12
    
    
    C(:,:,2) =
    
               1          20         300
               4          50         600
               7          80         900
              10         110        1200
    

相关问题