Быстрое удаление строк и столбцов из матрицы 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.

Это ужасно медленно. Как ни странно, это самое быстрое решение, предложенное внизу здесь .

Улучшение можно сделать, предварительно выделив массив и используя логические индексы

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.

Есть ли еще более быстрый способ для этого?

17
задан noio 12 November 2010 в 11:03
поделиться