Устранение части массивов в Matlab

Предположим, что у нас есть массив 100 * 4.

У нас также есть массив 100 * 1 из 1 и 0. Предположим, что есть n 1.

Мы хотим создать массив * 4 из массива 100 * 4, где мы включаем только столбцы, для которых второй массив равен 1.

Один из способов сделать это через двойной цикл for. Есть ли более простой способ?

Итак, у нас есть

A = [ [ 332 44 33 22 33 55 33 211 .....
      [ 823 44 12 98 19 23 32 911 .....
      ....
      ....
    ]

а также

 B = [1 0 0 1 0 0 0 ....]

и мы хотим

 C = [ [ 332 22 ...
       [ 823 98 ...
       ....
       ....
     ]

2 ответа

Решение

Вы должны использовать логическое индексирование:

C = A(:, B==1 );

Ты первый repmat логический вектор, так что он имеет точно такой же размер, что и матрица A,

idx2keep = repmat(b, [1 4]); % Or [4 1] depending on if it's a col or row vector

Тогда вы можете просто проиндексировать их

 B = A( idx2keep )

затем вы можете превратить его в вектор-столбец:

 B = B(:)

Это должно сделать работу. В следующий раз, пожалуйста, всегда публикуйте код или обозначения, чтобы было проще и яснее ответить на этот вопрос.

Другие вопросы по тегам