'행렬에 값 X가 포함되어 있습니까?'에 대한 함수
행렬에 특정 값이 포함되어 있는지 알아내는 MATLAB 함수가 내장되어 있습니까? (ala PHP의 in_array()
)
이를 수행하는 다양한 방법. ismember는 당신이 취하고 싶은 일련의 멤버십 행동이기 때문에 가장 먼저 떠오르는 것입니다. 그러므로
X = primes(20);
ismember([15 17],X)
ans =
0 1
15는 소수가 아니지만 17은 소수이기 때문에 ismember는 여기서 잘했습니다.
물론 find (또는 any)도 작동합니다. 그러나 이것들은 ismember라는 의미에서 벡터화되지 않았습니다. X가 나타내는 집합에 15가 있는지 테스트 할 수 있지만 두 숫자를 테스트하려면 루프 또는 연속 테스트가 필요합니다.
~isempty(find(X == 15))
~isempty(find(X == 17))
또는,
any(X == 15)
any(X == 17)
마지막으로 숫자가 실제 수 레일 수 있다면 정확한 값에 대한 테스트가 위험하다는 점을 지적합니다. 내가 보여준 것처럼 정수 값에 대한 테스트는 쉽습니다. 그러나 부동 소수점 수에 대한 테스트는 일반적으로 허용 오차를 사용해야합니다.
tol = 10*eps;
any(abs(X - 3.1415926535897932384) <= tol)
넌 할 수있어:
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)
한 벡터의 요소가 다른 벡터에 있는지 확인해야하는 경우 가장 좋은 솔루션은 ismember
다른 답변에서 언급 한 것입니다.
ismember([15 17],primes(20))
그러나 부동 소수점 숫자를 처리하거나 근접 일치 (+-1000도 가능)를 원할 때 내가 찾은 최상의 솔루션은 상당히 효율적인 파일 교환 제출입니다.ismemberf
매우 실용적인 예를 제공합니다.
[tf, loc]=ismember(0.3, 0:0.1:1) % returns false
[tf, loc]=ismemberf(0.3, 0:0.1:1) % returns true
기본 허용 오차는 일반적으로 충분하지만 더 많은 유연성을 제공합니다.
ismemberf(9.99, 0:10:100) % returns false
ismemberf(9.99, 0:10:100,'tol',0.05) % returns true
부동 소수점 데이터 의 경우 지정된 허용 오차로 집합 멤버십을 계산 하는 새 ismembertol
함수를 사용할 수 있습니다 . 이는 이제 MATLAB에 내장된다는 점을 제외하면 파일 교환에 있는 함수 와 유사합니다 . 예:ismemberf
>> pi_estimate = 3.14159;
>> abs(pi_estimate - pi)
ans =
5.3590e-08
>> tol = 1e-7;
>> ismembertol(pi,pi_estimate,tol)
ans =
1
참고 URL : https://stackoverflow.com/questions/1913670/function-for-does-matrix-contain-value-x
'programing tip' 카테고리의 다른 글
Python object .__ repr __ (self)는 표현식이어야합니까? (0) | 2020.11.05 |
---|---|
xcode에서 탭을 활성화 하시겠습니까? (0) | 2020.11.05 |
스크립트와 프로그램의 차이점은 무엇입니까? (0) | 2020.11.05 |
Chrome에서 Javascript 실행 추적-어떻게? (0) | 2020.11.05 |
플라스크에서 세션 시간 제한을 만드는 쉬운 방법이 있습니까? (0) | 2020.11.05 |