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

1 Ansicht (letzte 30 Tage)
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 Kommentare
Walter Roberson
Walter Roberson am 22 Jun. 2020
Growing the r array dynamically is really killing performance for you.
Shawn Cooper
Shawn Cooper am 23 Jun. 2020
Thanks for the feedback on what the issue was. I appreciate it!

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 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

Weitere Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by