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)
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)