Предположим

  A =  1  0  0
       1  0  1
       0  0  1
       1  0  1
       0  0  0

Теперь я хочу извлечь строки, значения 1-го и 3-го столбца которых равны 1 в той же строке, т.е. вывод должен быть

    1  0  1
    1  0  1

Попробовал с A(A(1:end,1)==A(1:end,3)==1), но не получил результата.

2
user3545355 17 Апр 2014 в 17:12

3 ответа

Лучший ответ

Попробуй это:

A(A(:,1) == 1 & A(:,3) == 1, :)
3
Rafael Monteiro 17 Апр 2014 в 13:25

Если вы точно знаете, что A логично или будет содержать только 0 и 1, тогда

A(A(:,3) & A(:,1), :)

В противном случае вам нужно явное сравнение с 1, поэтому используйте решение Рафаэля.

Причина, по которой объединение не работает (ваша первая попытка), заключается в следующем. Рассмотрим первую часть:

>> ( A(1:end,1)==A(1:end,3) )
ans =
     0
     1
     0
     1
     1

Сравнение этого с 1, очевидно, даст тот же результат:

>> ( A(1:end,1)==A(1:end,3) ) == 1
ans =
     0
     1
     0
     1
     1

Например, вы не сравниваете значения с 1, а сравниваете результат сравнения с 1. Обратите внимание, что порядок не имеет значения:

>> 1 == A(1:end,1) == A(1:end,3) 
ans =
     0
     1
     0
     1
     1

>> A(1:end,1) == 1 == A(1:end,3) 
ans =
     0
     1
     0
     1
     1
0
Rody Oldenhuis 17 Апр 2014 в 14:29