How to quickly calculate the sum of the transpose of a sparse matrix?

6 次查看(过去 30 天)
Dear All,
I have a very big sparse matrix A. I want to obtain the sum of its transpose of the selected columns in A. Here is my code:
B = A(:,selectedCol)';
sumA = sum(B);
I am wondering if there is a faster way to do the above calculation.
Thanks a lot in advance.
Benson

回答(2 个)

Matt J
Matt J 2021-7-7
编辑:Matt J 2021-7-7
A=sprand(1e6,1e3,100/1e6); %Example
selectedCol=1:2:100;
tic;
B=sum( A(:,selectedCol)');
toc
Elapsed time is 0.010279 seconds.
tic
B=sum( A(:,selectedCol) ,2)';
toc
Elapsed time is 0.005409 seconds.

Matt J
Matt J 2021-7-7
Depening on the size of selectedCols, it may also help to cast the operation as a matrix/vector multiplication
A=sprand(1e6,1e5,100/1e6);
selectedCol=1:10:size(A,2);
tic;
B=sum( A(:,selectedCol)');
toc
Elapsed time is 0.140409 seconds.
tic
B=sum( A(:,selectedCol) ,2)';
toc
Elapsed time is 0.182437 seconds.
z=false(size(A,2),1);
tic
x=z;
x(selectedCol)=1;
B=(A*x)';
toc
Elapsed time is 0.086501 seconds.
  5 个评论
Matt J
Matt J 2021-7-9
I do not know if you have a faster way to replace find.
Yes, don't use it. Use logical indexing instead.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by