Устранение части массивов в 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(:)
Это должно сделать работу. В следующий раз, пожалуйста, всегда публикуйте код или обозначения, чтобы было проще и яснее ответить на этот вопрос.