MATLAB ismembertol按任意行比较2个矩阵

时间:2018-12-21 11:28:12

标签: matlab matrix comparison

让我们说我有两个矩阵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)

通过使用“查找”,“任何”,“全部”,但是我不知道解决方案。

1 个答案:

答案 0 :(得分:1)

您可以将ismembertol'ByRows'选项一起使用:

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

请注意:

  • NaN值导致一行与其他任何行都不匹配。
  • 根据文档,tol被解释为tol*max(abs([A(:); x(:)]))的一部分。