2014-10-10 3 views
0

У меня плохой день на работе. У меня очень простой вопрос.Как удалить определенные элементы матрицы?

У меня есть 2x100 матрица,

[1 2 3 4 5 6 -2 -3 .... 

2 4 5 3 2 -4 3 3 ...] 

То, что я хотел бы сделать то, что проверить первую строку матрицы и удалить все числа больше 2 и удалить соответствующую запись в row2. Так, например, если есть только 1 элемент, чем в верхнем регистре, наша матрица станет матрицей 2x99.

ответ

3

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

idxToKeep = yourMat(1, :) <= 2; 

newMat  = yourMat(:, idxToKeep); 

или в случае, если вы не хотите, чтобы создать новую матрицу:

yourMat  = yourMat(:, idxToKeep); 

или все в одном лайнере:

yourMat  = yourMat(:, yourMat(1, :) <= 2); 
+0

@ Dan Я согласен, если бы это был мой собственный код, я бы сделал это. Однако, я думаю, это облегчает понимание TS. Я добавлю это ... – Nick

+0

Я просто добавлю еще одну ссылку: 'a (:, a (1,:) <= 0.2) = [];' работает тоже. В случае, если кто-то задается вопросом; нет, это не быстрее, и я рекомендую один из решений Ника. =) –

+1

@RobertP. Думаю, вы хотели '> 2'? И это действительно медленнее: http://stackoverflow.com/questions/12421345/deleting-matrix-elements-by-vs-reassigning-matrix – Dan

Смежные вопросы