Faster Rank Calculations and Indexing - For Loop or Another Way?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Shawn Cooper
le 21 Juin 2020
Commenté : Shawn Cooper
le 23 Juin 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 commentaires
Walter Roberson
le 22 Juin 2020
Growing the r array dynamically is really killing performance for you.
Réponse acceptée
Walter Roberson
le 22 Juin 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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Interpolation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!