Hi,
I have three matrices and C and am trying to compute a fourth matrix Min the following way:
for p = 1:N
for q = 1:N
M(p,q) = 2 * sum(A(:,q) .* conj(B(:,p)) .* C(:,q));
end
end
All matrices are . I am trying to compute this for N = 750 or so and the computation is extremely slow. I cannot find any obvious way to vectorize the code. Any help would be very much appreciated.
Thanks.

 採用された回答

Bruno Luong
Bruno Luong 2024 年 4 月 15 日
編集済み: Bruno Luong 2024 年 4 月 15 日

1 投票

Not tested but the sign reading tell me
M = 2*B' * (A.*C);

4 件のコメント

Voss
Voss 2024 年 4 月 15 日
編集済み: Voss 2024 年 4 月 15 日
Very good +1. But don't forget the factor of 2.
Bruno Luong
Bruno Luong 2024 年 4 月 15 日
Fixed
James Tursa
James Tursa 2024 年 4 月 15 日
編集済み: James Tursa 2024 年 4 月 15 日
I would guess that having 2*B' at the front will force MATLAB to physically compute the conjugate transpose of B first. However, if you segregate the 2* operation as 2 * (B' * (A.*C)), the B' would not need to be physically formed to do the conjugate transpose matrix multiply since this will be handled by flags passed into the BLAS routine. Maybe a bit faster? E.g.,
A = rand(5000); B = rand(5000); C = rand(5000);
timeit(@()2*B' * (A.*C))
ans = 0.5515
timeit(@()2*(B' * (A.*C)))
ans = 0.4901
Shreyas Bharadwaj
Shreyas Bharadwaj 2024 年 4 月 16 日
Thank you!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Get Started with MATLAB についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by