Faster Rank Calculations and Indexing - For Loop or Another Way?
2 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Shawn Cooper
il 21 Giu 2020
Commentato: Shawn Cooper
il 23 Giu 2020
Hello, I'm using the following code to find the rank of all nxn matrices with matrix entries [0 1] and plot them in a histogram.
N = 4;
n2 = N^2;
x = repmat({[0, 1]}, 1, n2);
M = reshape(combvec(x{:}), 4, 4, []);
r = [];
for i = [1:length(M)]
r = [r rank(M(:,:,i))];
end
hist(r)
As additional possble matrix entries are added ([0 1 2], for example), the number of possible matrices increases exponentially and the speed of the rank() function decreases.
Is there a faster way to do this?
2 Commenti
Walter Roberson
il 22 Giu 2020
Growing the r array dynamically is really killing performance for you.
Risposta accettata
Walter Roberson
il 22 Giu 2020
N = 4;
n2 = N^2;
ents = [0 1 2];
tic
[parts{1:n2}] = ndgrid(ents);
toc
tic
pages = reshape(cell2mat(cellfun(@(C)C(:).', parts(:), 'uniform', 0)), N, N, []);
toc
np = size(pages,3);
ranks = zeros(1, np);
tic
for K = 1 : np
ranks(K) = rank(pages(:,:,K));
end
toc
0 Commenti
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!