Efficient submatrix product computation

조회 수: 3(최근 30일)
Aaron Pim
Aaron Pim 2022년 9월 20일
댓글: Aaron Pim 2022년 9월 20일
I am considering the discrete Smoluchowski equations and I need efficiently compute a matrix product.
For , and a given I want to compute the product
I can easily do this by the following for loop
b = 0
for j = 1:ceil((i-1)/2)
b = b + K(j,i-j)*y(j)*y(i-j);
However, I want to know if there is a more efficient way of computing this product in a single line or less.
  댓글 수: 1
Chunru 2022년 9월 20일
Have you tested that your above code works?

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

채택된 답변

Karim 2022년 9월 20일
편집: Karim 2022년 9월 20일
Do note that a for loop can be very efficient. I'm not sure the single line methods will always be faster.
Below you can find one (of many) methods to reduce the number of lines in the code. I used the sub2ind command to get the data directy out of the matrix K.
% initialize data
N = 1000;
y = rand(N,1);
K = rand(N,N);
i = randi(N,1);
% test loop...
b1 = 0;
for j = 1:ceil((i-1)/2)
b1 = b1 + K(j,i-j)*y(j)*y(i-j);
Elapsed time is 0.006585 seconds.
b1 = 60.1868
% test single line
% first setup indices
j = (1:ceil((i-1)/2))';
% now compute the sum
b2 = sum( K(sub2ind(size(K),j,i-j)) .* y(j) .* y(i-j) );
Elapsed time is 0.006417 seconds.
b2 = 60.1868
  댓글 수: 1
Aaron Pim
Aaron Pim 2022년 9월 20일
This is perfect, thank you.

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

추가 답변(0개)


Find more on Loops and Conditional Statements 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!

Translated by