Удаление строк на основе условия (Matlab) - PullRequest
0 голосов
/ 24 июня 2018

Я пытаюсь удалить строки из матрицы на основе условия. У меня есть двойная матрица 371000x5 и вектор манекенов 371000x1 (1 и 0). Я хочу удалить каждую строку из исходной матрицы, где значение вектора макетов равно 1. Я пробовал следующее, но это занимает очень много времени:

for i = 1:size(matrix_num,1)
if missing_matrix(i,1) >=0
    matrix_num(i,:) = [];
end
end

Мой Matlab был занят уже более 30 минут, поэтому я даже не уверен, что код правильный. Есть ли более эффективный способ сделать это?

Кроме того, я должен выполнить то же действие для матрицы клеток (категориальные данные). Стоит ли ожидать какой-либо огромной разницы от числовой матрицы?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Программный способ сделать это:

new_matrix = old_matrix(missing_vector==1,:)

для сохранение строк с отсутствующим вектором 1

new_matrix = old_matrix(missing_vector==0,:)

для удаление строк с отсутствующим вектором 1

Для образовательных ценностей, если вы хотите, чтобы цикл работал, не делайте это строка за строкой. Ваше решение приводит к тому, что матрица копируется и перераспределяется в каждой удаленной строке.

Итак, вам будет лучше, если вы заранее рассчитаете размер полученной матрицы:

new_matrix = zeros(sum(missing_vector), 5)

и тогда ваша итерация сработает:

index_new=1
for index_old = 1:size(old_matrix,1)
      if missing_vector(index_old) ==0
            new_matrix(index_new,:) = old_matrix(index_old,:);
      end
end
0 голосов
/ 24 июня 2018

Попробуйте компактный код MATLAB

matrix_num (missing_matrix> = 0,:) = []

  • Примечание : Вы должны создать вектор для переменной missing_matrix . Если эта переменная является матричной, вам нужна другая форма кода.

Как я знаю, вы можете использовать его и в массиве ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...