MATLAB ismembertol сравнить 2 матрицы по любой строке - PullRequest
0 голосов
/ 21 декабря 2018

Допустим, у меня есть две матрицы A и x:

A=[10,10;
   20,20;
   30,30;
   NaN,NaN
   NaN,NaN];
x=[10,9;
   32,25;
   19,21;
   11,10;
   NaN,NaN];

Я хочу сравнить обе матрицы и найти строки x, которые соответствуют любой строке A в пределах определенного допуска + -0,01 (= + - 10%).Таким образом, в этом случае:

Строка 1 из x соответствует строке (строке 1) в A, которая находится в пределах допуска.

Строка 2 из x почти соответствует строке (строке 2) в A, но он находится за пределами + - 10%.

Строка 3 из x соответствует строке (строке 2) в A, которая находится в пределах допуска.

Строка 4 из x соответствует строке (снова строка 1) в пределах A в пределах допуска.

Строка 5 из x может игнорироваться (только NaN).

Гарантируется, что A и x имеют одинаковый размер и количество элементов.Однако строки расположены не по порядку, поэтому я не могу сравнить строку за строкой.Я просто хочу знать, соответствует ли строка в x ЛЮБОЙ строке в A, и если да, я бы хотел сохранить индекс этой строки.Поэтому в моем случае я бы предпочел иметь выходной (логический) вектор, такой как:

v=[1,0,1,1,0]; % Logical vector with matching rows of x
id=find(v==1); % Result is [1,3,4], finds the indices

Я пробовал различные комбинации

ismembertol(A,x,0.1) % and ismembertol(A,x,0.1,'ByRows',true)

, используя 'find', 'any'«все», но я не могу найти решение.

1 Ответ

0 голосов
/ 21 декабря 2018

Вы можете использовать ismembertol с опцией 'ByRows':

result = ismembertol(x, A, 0.1, 'ByRows', true);

Обратите внимание, что:

  • NaN значения вызывают строкуне соответствует ни одной другой строке.
  • Согласно документации, tol интерпретируется как дробь tol*max(abs([A(:); x(:)])).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...