Outer products are faster with b*b' in matlab?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
z cy
el 23 de Sept. de 2024
Comentada: Bruno Luong
el 23 de Sept. de 2024
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 comentarios
Bruno Luong
el 23 de Sept. de 2024
If you know A befre hand yes. You never state that in your question.
Respuesta aceptada
Sandeep Mishra
el 23 de Sept. de 2024
Editada: Sandeep Mishra
el 23 de Sept. de 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 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!