Ваша проблема в том, что sum(~A,2) == 1
- это вектор столбца, поэтому вы теряете данные о том, какой столбец вы хотите.
Вы можете сделать следующее:
% (A == 0) : Elements where A is zero
% (sum(~A,2) == 1) : Rows where there's exactly 1 zero
% We want the matrix where both of these are true...
idx = (sum(~A,2) == 1) .* (A == 0);
% We want the row and column indices of the zeros
[r,c] = find( idx );
Пример:
% A with single-zero rows in positions (2,1) and (4,2)
A = [ 1 1 1 1 1 1
0 1 1 1 1 1
1 0 1 0 1 1
1 0 1 1 1 1
1 1 1 1 1 1
1 1 1 1 0 0 ];
idx = (sum(~A,2) == 1) .* (A == 0); % Could replace (A==0) with (~A)
[r,c] = find(idx)
% r = [2; 4]
% c = [1; 2];
Примечание: это зависит от неявного расширения, совместимого с MALTAB R2016b или новее. Вы не упомянули свою версию в вопросе, но для более старых версий используйте это для idx
:
idx = bsxfun( @times, (sum(~A,2) == 1), (A == 0) );