Outer products are faster with b*b' in matlab?

4 次查看(过去 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 个评论
z cy
z cy 2024-9-23
编辑:z cy 2024-9-23
Thanks!
I have found the faster way as you shown!
Just use A*A', while A is a 6800*100 matrix, then I can get the final result.
Bruno Luong
Bruno Luong 2024-9-23
If you know A befre hand yes. You never state that in your question.

请先登录,再进行评论。

采纳的回答

Sandeep Mishra
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
Elapsed time is 0.004505 seconds.
For more information, refer to the following MathWorks Documentation:
  1. ‘sparse’ function: https://www.mathworks.com/help/releases/R2022b/matlab/ref/sparse.html
  2. 'full' function: https://www.mathworks.com/help/releases/R2022b/matlab/ref/full.html
I hope this approach helps in addressing the issue effectively.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

产品


版本

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by