Outer products are faster with b*b' in matlab?
2 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Sandeep Mishra
on 23 Sep 2024
Edited: Sandeep Mishra
on 23 Sep 2024
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 Comments
More Answers (0)
See Also
Categories
Find more on Logical 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!