2013-06-20 4 views
0

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

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

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

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

Таким образом, мы имеем

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 ... 
     .... 
     .... 
    ] 
+0

Посмотрите [этот вопрос/ответ] (http://stackoverflow.com/questions/11419220/matlab-extract-submatrix-with-logical-indexing) , Я думаю, вы ищете форму логического индексирования. – Schorsch

ответ

4

Вы должны использовать logical indexing:

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

Краткий, правильный и со ссылкой, если вы не понимаете синтаксис +1. – Floris

+0

Хороший, очень лаконичный и хорошо работает. –

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(:) 

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

+0

Спасибо, я добавил дополнительную информацию –

+0

'repmat'? Разве вы не слышали о 'bsxfun'? – Shai

+0

Как использовать bsxfun в этой ситуации? Кроме того, это решение возвращает массив 1x (4n) вместо массива 4xn. –