让我们说我有两个矩阵A和x:
A=[10,10;
20,20;
30,30;
NaN,NaN
NaN,NaN];
x=[10,9;
32,25;
19,21;
11,10;
NaN,NaN];
我想比较两个矩阵,并找到在+ -0.01(= +-10%)的特定容差内与A的任何行相对应的x行。因此,在这种情况下:
x的第1行与A内公差范围内的一行(第1行)匹配。
x的第2行几乎与A中的行(第2行)匹配,但在+-10%之外。
x的第3行与A内公差范围内的一行(第2行)匹配。
x的第4行在公差范围内与A中的一行(再次为第1行)匹配。
x的第5行可以忽略(仅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)
通过使用“查找”,“任何”,“全部”,但是我不知道解决方案。
答案 0 :(得分:1)
您可以将ismembertol
与'ByRows'
选项一起使用:
result = ismembertol(x, A, 0.1, 'ByRows', true);
请注意:
NaN
值导致一行与其他任何行都不匹配。tol
被解释为tol*max(abs([A(:); x(:)]))
的一部分。