Outer products are faster with b*b' in matlab?
    11 次查看(过去 30 天)
  
       显示 更早的评论
    
I have a column vector with about 6800 elements, many of which are 0. How can I quickly calculate the multiplication of the column vector and its transpose?
a = rand(77,1);
b = [a; zeros(6800,1)]
tic
v = b*b';
% 0.053078s
toc
tic
v = bsxfun(@times, b, b.');
%0.066428s
toc
5 个评论
采纳的回答
  Sandeep Mishra
      
 2024-9-23
        
      编辑:Sandeep Mishra
      
 2024-9-23
  
      Hi Z, 
From the code snippet, it's clear that you are aiming to calculate the product of a matrix with its transpose, where a significant portion of the matrix elements are zeros. 
To improve efficiency, MATLAB’s ‘sparse’ matrix can be employed. 
By converting the matrix into a sparse format, you can effectively reduce memory usage since sparse matrices only store non-zero elements. This can result in a faster computation, especially when dealing with large matrices where most elements are zero. 
Refer to the following code snippet to implement the functionality:
a = rand(77,1); 
b = [a; zeros(6800,1)];
% Converting matrix to sparse matrix 
b_sparse = sparse(b);  
tic 
% Calculating Sparse product 
v_sparse = b_sparse * b_sparse';  
% Converting Sparse product result to Full matrix form
v_full = full(v_sparse); 
toc 
For more information, refer to the following MathWorks Documentation:  
- ‘sparse’ function: https://www.mathworks.com/help/releases/R2022b/matlab/ref/sparse.html
- 'full' function: https://www.mathworks.com/help/releases/R2022b/matlab/ref/full.html
I hope this approach helps in addressing the issue effectively. 
0 个评论
更多回答(0 个)
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


