Help with Matrix block multiplication
    7 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Eugenio Grabovic
      
 am 27 Jan. 2019
  
    
    
    
    
    Bearbeitet: Eugenio Grabovic
      
 am 28 Jan. 2019
            Hi, i need help with block matrix multiplication. I think a practical example should explain what i'm looking for.
Given:
A = rand(3,3); B = rand(9,3);
so basically i have [A] nxn block (generalizing)  and [B] (k*n)xn  block.
I would like to achieve as a result the equivalent of the following:
[A*B(1:3,:);A*B(4:6,:);A*B(7:9,:)];
possibly without any loops and arrayfun/cellfun.
Thank you in advance.
7 Kommentare
  Stephan
      
      
 am 27 Jan. 2019
				Is A always of size n x n ?
Is B always of size  (k*n) x n with k=[1,2,3...] ?
Akzeptierte Antwort
  madhan ravi
      
      
 am 28 Jan. 2019
        
      Bearbeitet: madhan ravi
      
      
 am 28 Jan. 2019
  
      A = [1 1 0;1 1 0; 1 1 1];
B = [1,2,3;4,5,6;7,8,9;2,6,8;4,1,6;1,12,16;4,2,1;4,9,6;3,8,2];
expected_result=[A*B(1:3,:);A*B(4:6,:);A*B(7:9,:)];
%code starts here
[m,n]=size(A);
[r,c]=size(B);
BB=permute(reshape(B',c,c,[]),[2 1 3]);
[a,b,c]=size(BB);
BBB=reshape(BB,[a b*c]);
A_times_B_slices=A*BBB;
C=permute(reshape(A_times_B_slices,b,a,[]),[2 1 3]);
My_Result=reshape(C,c,[],1)';
isequal(My_Result,expected_result) % to check both the results are the same
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Linear Algebra finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


