필터 지우기
필터 지우기

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

조회 수: 6 (최근 30일)
Benson Gou
Benson Gou 2021년 7월 7일
댓글: James Tursa 2021년 7월 9일
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.
  댓글 수: 2
Benson Gou
Benson Gou 2021년 7월 7일
Hi, Matt,
Thanks a lot for your great help. I tested your code, but I found it took longer time than the original code.
Thanks a lot again.
Benson

댓글을 달려면 로그인하십시오.


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.
Stephen23
Stephen23 2021년 7월 9일
편집: Stephen23 2021년 7월 9일
"I do not know if you have a faster way to replace find."
Answers and comments on your previous threads related to FIND:
Have you considered using logical indexing?

댓글을 달려면 로그인하십시오.

카테고리

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