查找值是否等于MATLAB中任何数组元素的值

Jam*_*mes 7 arrays comparison matlab

谁能告诉我是否有办法(在MATLAB中)检查某个值是否等于另一个数组中存储的任何值?

我打算使用它的方法是检查一个矩阵中的元素索引是否等于另一个数组中存储的值(其中存储的值是满足特定条件的元素的索引).

因此,如果符合条件的元素的索引存储在下面的矩阵中:

criteriacheck = [3 5 6 8 20];
Run Code Online (Sandbox Code Playgroud)

遍历主数组(调用array)并检查索引是否匹配:

for i = 1:numel(array)
  if i == 'Any value stored in criteriacheck'
    %# "Do this"
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有人知道我怎么会这样做?

Pen*_*m10 19

@woodchips之前给出的优秀答案也适用于此:

许多方法可以做到这一点.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)


gro*_*ndi 3

你可以使用 find 命令

if (~isempty(find(criteriacheck == i)))
    % do something
end
Run Code Online (Sandbox Code Playgroud)