Sparse for element by element operation
    5 views (last 30 days)
  
       Show older comments
    
If we want to perform the product of two sparse matrices or sparse and a full matrix , sparse function is very useful as it avoids multiplications with zero. However when we do element by element multiplication of two sparse matrices or a sparse matrix and a full matrix it is observed that it takes a considerable amount of time as compared to the multiplication of full matrices. Here is a concrete example
    A = sprand(1000,1000,0.005);
    B = rand(1000,1000);
    Af = full(A);
    timeit(@() Af.*B)
ans =
     5.1227e-04
    timeit(@() A.*B)
ans =
      0.0011
How do I tackle this issue when I am looking for a considerable lower time than the multiplication of two full matrices?
0 Comments
Answers (2)
  Bruno Luong
      
      
 on 15 Sep 2018
        
      Edited: Bruno Luong
      
      
 on 15 Sep 2018
  
      A = sprand(1000,1000,0.005);
B = rand(1000,1000);
tic
Af = full(A);
AB=Af.*B;
toc % Elapsed time is 0.011628 seconds.
tic
AB=A.*B;
toc % Elapsed time is 0.004143 seconds.
Recommended solution
    tic
    [i,j,a]=find(A);
    b=B(sub2ind(size(B),i,j));
    AB=sparse(i,j,a.*b);
    toc % Elapsed time is 0.001570 seconds.
3 Comments
  Bruno Luong
      
      
 on 16 Sep 2018
				
      Edited: Bruno Luong
      
      
 on 16 Sep 2018
  
			Why you think my code assumes some loop or not ? It just carries out the element-wise product A.*B like other methods.
  Bruno Luong
      
      
 on 15 Sep 2018
        
      Edited: Bruno Luong
      
      
 on 15 Sep 2018
  
      [i,j]=find(A);
b=B(sub2ind(size(B),i,j));
AB=setsparse(A,i,j,b,@times);
0 Comments
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
