![]() |
快速从MATLAB矩阵中删除行和列
有没有一种快速方法可以从MATLAB中的大型矩阵中删除行和列?
我有一个很大的(正方形)距离矩阵,我想从中删除许多行/列。 天真地: s = 12000; D = rand(s); cols = sort(randsample(s,2)) rows = sort(randsample(s,2)) A = D; tic A(rows,:) = []; A(:,cols) = []; toc % Elapsed time is 54.982124 seconds. 不过,这太慢了。奇怪的是,这[I]是[/I] [URL="http://www.mathworks.com/matlabcentral/newsreader/view_thread/153352"]此处[/URL]底部建议的最快的解决方案。 通过预分配数组并使用布尔值索引可以进行改进 A = zeros(size(D) - [numel(rows) numel(cols)]); r = true(size(D,1),1); c = true(size(D,2),1); r(rows) = false; c(cols) = false; tic A = D(r,c); toc % Elapsed time is 20.083072 seconds. 还有更快的方法吗? [B]回答:[/B] 似乎是内存瓶颈。在我笨拙的笔记本电脑上,分解D并将这些运算符应用于每个部件要快得多(使用s = 12,000使计算机崩溃)。在这里,我将其分为两部分,但您可能可以找到一个更好的分区。 s = 8000; D = rand(s); D1 = D(1:s/2,:); D2 = D((s/2 + 1):end,:); cols = sort(randsample(s,2)); rows = sort(randsample(s,2)); A1 = D1; A2 = D2; tic A1(rows(rows s/2) - s/2,:) = []; A1(:,cols) = []; A2(:,cols) = []; toc A = D; tic A(rows,:) = []; A(:,cols) = []; toc Elapsed time is 2.317080 seconds. Elapsed time is 140.771632 seconds. [url=https://stackoverflow.com/questions/4163876]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 05:38。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.