Подход Kamtal будет работать, если у вас нет строк, суммированных до нуля. Чтобы быть более безопасным, вы должны проверить, содержит ли строка только нулей. Другими словами, попробуйте сделать это:
A(~any(A,2), :) = [];
any
проверяет, является ли массив или матрица имеет любой из его элементов не равно нулю, который выдает логический true
и false
иначе. Если вы используете any
над матрицей, вы можете указать, хотите ли вы проверить это по строкам или столбцам во втором параметре any
. В вашем случае вы хотите использовать столбцы для каждой строки, поэтому вы должны указать второй параметр равным 2.
Поскольку вы хотите проверить, не содержит ли любая строка всех нулей, вы должны использовать any
над колоннами и проверить обратное. Таким образом, any
будет выводить логический false
, если все строки состоят только из нулей. Это то, что мы ищем, но вы хотите, чтобы это было true
, а не false
, и поэтому мы инвертируем с помощью ~
, поскольку мы обратимся к тому, что мы ищем.
Однако, если вы хотите, чтобы ваш метод работает, вы бы не использовать for
петли, но while
цикла вместо этого как индекс для доступа к каждой строке постоянно меняется. Таким образом, как только вы удаляете строку, вы не увеличиваете индекс для доступа к следующей строке, до, вы успешно найдете строку, которая не суммируется до нуля. Помните, что когда вы удаляете строку, строка, которая была чуть ниже нее, перемещается в позицию, которая была удалена, и поэтому вы все равно будете проверять эту же позицию для строки, которая не суммируется до нуля. Вы перейдете к следующей строке, как только найдете строку, которая не суммируется до нуля.
Другими словами, это сделать:
i = 1;
while i < length(A)
if (sum(A(i, :)) == 0)
A(i, :) = [];
continue;
end
i = i + 1;
end
Ваш подход будет работать только если предположить, что у вас нет ни одной строки в вашей матрице этой суммы к нулю. Будет ли ваш подход работать, если бы у нас была следующая матрица: 'A = [-1 1 0; 1 0 -1];Вы ищете удаление строк, которые ** sum ** равны нулю или содержат только нули? – rayryeng
Я хотел бы удалить строки, которые являются нулями. В моей матрице нет отрицательного значения. Спасибо за ваш ответ @rayryeng. Я понимаю свою ошибку. – user199027