Функция для 'матрицы содержит значение X?'

Существует ли созданный в функции MATLAB, чтобы узнать, содержит ли матрица определенное значение? (PHP's крыла in_array())

70
задан chappjc 7 March 2015 в 04:18
поделиться

2 ответа

Есть много способов сделать это. ismember - первое, что приходит на ум, так как это заданное действие членства, которое вы хотите предпринять. Таким образом,

X = primes(20);
ismember([15 17],X)
ans =
      0    1

Так как 15 не является простым числом, а 17 есть, ismember здесь хорошо справился со своей задачей.

Конечно, find (или любой) также будет работать. Но они не векторизованы в том смысле, в каком был его участник. Мы можем проверить, входит ли 15 в набор, представленный X, но для проверки обоих этих чисел потребуется цикл или последовательные тесты.

~isempty(find(X == 15))
~isempty(find(X == 17))

или,

any(X == 15)
any(X == 17)

Наконец, я хотел бы указать, что тесты для точных значений опасны, если числа могут быть верными плавающими. Как я показал, тесты с целочисленными значениями просты. Но тесты для чисел с плавающей запятой обычно должны использовать допуск.

tol = 10*eps;
any(abs(X - 3.1415926535897932384) <= tol)
99
ответ дан 24 November 2019 в 13:28
поделиться

вы можете сделать:

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

Чтобы сделать описанное выше векторизованным способом, используйте:

any( bsxfun(@eq, A(:), [5 7 11] )

или как @woodchips предлагает:

ismember([5 7 11], A)
11
ответ дан 24 November 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: