没有循环或矩阵的乘法

时间:2016-02-12 10:00:44

标签: arrays matlab vector vectorization matrix-multiplication

我有两个大小为nm

的向量
a = [a1 a2 ... an];
b = [b1 b2 ... bm];

我希望"乘以"他们得到了结果:

c =
     a1*b1 a1*b2 ... a1*bm
     a2*b1 a2*b2 ... a2*bm
     .     .         .
     .     .         . 
     an*b1 an*b2 ... an*bm

有没有简单的方法来获得这样的结果而不诉诸于循环或矩阵?

1 个答案:

答案 0 :(得分:5)

  1. bsxfun应用于a的列版本和b的行版本:

    a = 1:3; %// example input
    b = 10:10:40; %// example input
    c = bsxfun(@times, a(:), b(:).'); %'// or bsxfun(@times, b(:).', a(:));
    

    结果:

    c =
        10    20    30    40
        20    40    60    80
        30    60    90   120
    
  2. 或者,可能更快,使用a b作为列向量时间c = a(:)*b(:).'; 作为行向量,按顺序:

    c = kron(a(:), b(:).'); %'// or kron(b(:).', a(:))
    
  3. 您想要的内容也可以解释为matrix multiplication,因此您可以使用Kronecker product

    $search = 9;
    
    $order_list = array ( array ("tangible", 1, 8, 33, 19000),
                      array ("tangible", 1, 9, 8, 19000),
                      array ("tangible", 6, 3, 24, 19000),
                      array ("tangible", 6, 2, 10, NULL),
                      array ("tangible", 1, 17, 11, 28000));
    
    
    
    
    foreach ($order_list as $string){
        if ($string[2] == $search){
        print_r( $string);  
        }  
    }