'矩阵包含值X?'的函数

zen*_*nna 70 floating-point matlab function matrix

是否有内置的MATLAB函数来确定矩阵是否包含某个值?(ala PHP的in_array())

小智 99

许多方法可以做到这一点.ismember是第一个浮现在脑海中的人,因为它是您希望采取的一套会员制行动.从而

X = primes(20);
ismember([15 17],X)
ans =
      0    1
Run Code Online (Sandbox Code Playgroud)

由于15岁不是素数,但17岁,ismember在这里做得很好.

当然,查找(或任何)也将起作用.但是这些并不是因为成员的意义而被矢量化.我们可以测试15是否在由X表示的集合中,但是为了测试这两个数字将进行循环或连续测试.

~isempty(find(X == 15))
~isempty(find(X == 17))
Run Code Online (Sandbox Code Playgroud)

要么,

any(X == 15)
any(X == 17)
Run Code Online (Sandbox Code Playgroud)

最后,我要指出,如果数字可能是真正的浮点数,那么精确值的测试是危险的.正如我所示,对整数值的测试很容易.但是针对浮点数的测试通常应该采用容差.

tol = 10*eps;
any(abs(X - 3.1415926535897932384) <= tol)
Run Code Online (Sandbox Code Playgroud)

  • 三者中最快的似乎是"任何".但是你可能想要自己衡量(使用`tic`和`toc`). (2认同)

Amr*_*mro 11

你可以做:

A = randi(10, [3 4]);      %# a random matrix
any( A(:)==5 )             %# does A contain 5?
Run Code Online (Sandbox Code Playgroud)

要以矢量化方式执行上述操作,请使用:

any( bsxfun(@eq, A(:), [5 7 11] )
Run Code Online (Sandbox Code Playgroud)

或者@woodchips建议:

ismember([5 7 11], A)
Run Code Online (Sandbox Code Playgroud)