Clear Filters
Clear Filters

Faster Rank Calculations and Indexing - For Loop or Another Way?

2 views (last 30 days)
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 Comments
Walter Roberson
Walter Roberson on 22 Jun 2020
Growing the r array dynamically is really killing performance for you.
Shawn Cooper
Shawn Cooper on 23 Jun 2020
Thanks for the feedback on what the issue was. I appreciate it!

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 22 Jun 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

More Answers (0)

Community Treasure Hunt

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

Start Hunting!