Мне нужно вычислить ранги n
симметричных матриц размера m
. Однако при этом я понял, что время вычисления ранга симметричной матрицы намного медленнее, чем время вычисления ранга нормальной матрицы (см. Мой код ниже).
# Part I
m = 77;
n = 20_000;
A = rand(m,m);
SA = Symmetric(A);
@btime rank($A); #result: 357.101 μs (9 allocations: 92.77 KiB)
@btime rank($SA); #result: 2.915 ms (13 allocations: 75.69 KiB)
По этой причине я только что вычислил ранги n
квадратных матриц размера m
. Время выполнения этой работы составляло 8-9 с. Но я не доволен этим.
# Part II
A3D = rand(m, m, n);
ArrOfArr = [ii for ii in eachslice(A3D ,dims=3)];
@btime res1 = rank.($ArrOfArr); # 8.568 s (180002 allocations: 1.77 GiB)
Итак, кто-нибудь знает, как ускорить мой код во второй части? Заранее спасибо!