2016-03-04 2 views
0

Так что я хочу удалить строки матрицы, содержащие ноль, но только для определенных столбцов. Например:Удалить строки с 0 для определенных столбцов в Matlab

A = [[0 0 0 0; 1 2 0 4; 2 0 1 1; 0 0 0 0; 1 2 3 4; 0 1 2 3]; 

Я хочу, чтобы матрица A проверяла, содержит ли второй и/или четвертый столбцы нулевые значения. Если это так: тогда удалите всю строку. Таким образом, результат должен быть:

A = [1 2 0 4; 1 2 3 4; 0 1 2 3]; 

Я использовал эту функцию:

new_a = A(all(A,2),:) 

Но я удалил все строки, содержащие нули.

ответ

1

Вы можете написать

>>> secondColIsNonzero = A(:, 2) ~= 0; 
>>> fourthColIsNonzero = A(:, 4) ~= 0; 
>>> keep = secondColIsNonzero & fourthColIsNonzero; 
>>> newA = A(keep, :) 
newA = 
    1  2  0  4 
    1  2  3  4 
    0  1  2  3 

держать (т.е. не удалять) столбцы, где ни второго или четвёртый столбец равен нуль.

Для менее подробного решения, рассмотрим индексирование обе колонки в то же самое время и используя all с размерностью аргумента:

keep = all(A(:, [2 4]) ~= 0, 2) 
+0

Спасибо за ваш ответ, теперь у меня есть вопрос по моему вопросу. Например, теперь я хочу, чтобы столбец 2 И столбец 4 были нулевыми, я хочу, чтобы эти строки вышли из матрицы. Итак, новая матрица должна быть: A = [1 2 0 4; 2 0 1 1; 1 2 3 4; 0 1 2 3]; Можете ли вы мне помочь с кодом? Спасибо alot – user5424264

+0

Тогда столбцы, которые вы хотите сохранить, все, где хотя бы один из col2 или col4 отличен от нуля. Это можно выразить как: keep = any (A (:, [2 4]) ~ = 0, 2) – Derek

0

Это легко решается с помощью find() функции:

B = A(find(A(:,2)~=0),:) 

find() по умолчанию возвращает строки, поэтому вызов в этом случае возвращает индекс строк, где значение во втором столбце не равно 0.

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