【发布时间】:2011-05-09 00:16:15
【问题描述】:
在 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.
不过,这非常慢。 奇怪的是,这是底部here建议的最快解决方案。
可以通过预分配数组和使用布尔索引来进行改进
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.
还有更快的方法吗?
【问题讨论】:
标签: matlab