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

2 ビュー (過去 30 日間)
Shawn Cooper
Shawn Cooper 2020 年 6 月 21 日
コメント済み: Shawn Cooper 2020 年 6 月 23 日
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 件のコメント
Walter Roberson
Walter Roberson 2020 年 6 月 22 日
Growing the r array dynamically is really killing performance for you.
Shawn Cooper
Shawn Cooper 2020 年 6 月 23 日
Thanks for the feedback on what the issue was. I appreciate it!

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2020 年 6 月 22 日
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 件)

カテゴリ

Help Center および File ExchangeMathematics についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by