matrix multiplication without declaring the destination matrix first
2 ビュー (過去 30 日間)
古いコメントを表示
hey,
I'm trying to multiply two matrices (I don't want to use any shortcuts, I want to do the multiplication by defention). can I do it without declaring first on the matrix?
what I wrote is:
C2 = zeros(N)
for i = 1:N
for j = 1:N
for k = 1:N
C2(i,j) = C2(i,j) + A(i,k)*B(k,j);
end
end
end
but the action of C2 = zeroes(N) is time consuming since N=1000 in this case. anyway to skip this declaration?
Thank you!
3 件のコメント
dpb
2019 年 10 月 29 日
C2(N,N)=0;
may be even a tiny fraction faster...whatever it takes, it's a nit in comparison to not preallocting for larger arrays.
回答 (1 件)
Matt J
2019 年 10 月 29 日
編集済み: Matt J
2019 年 10 月 29 日
You can loop backwards. Then the pre-allocation will be done silently.
clear C2
for i = N:-1:1
for j = N:-1:1
for k = 1:N
C2(i,j) = C2(i,j) + A(i,k)*B(k,j);
end
end
end
However, I don't know why you think the zeros command is the slow part of the code. I also don't know why you care about speed. The only reason it would make sense to do this is as a homework exercise, in which case speed should not be the issue.
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!