Efficient submatrix product computation
1 次查看(过去 30 天)
显示 更早的评论
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);
end
However, I want to know if there is a more efficient way of computing this product in a single line or less.
采纳的回答
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...
tic
b1 = 0;
for j = 1:ceil((i-1)/2)
b1 = b1 + K(j,i-j)*y(j)*y(i-j);
end
toc
b1
% test single line
tic
% 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) );
toc
b2
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!