有没有一种快速的方法在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.
虽然如此,这个方法非常慢。 奇怪的是,这个方法在这里被建议作为最快的解决方案。
通过预先分配数组并使用布尔索引可以改进此方法。
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.
还有更快的方法吗?