ismembertol
허용오차 내에서 데이터 집합의 멤버 찾기
구문
설명
은 LIA
= ismembertol(A
,B
,tol
)A
의 요소가 B
의 요소의 허용오차 범위 내에 있는 경우 논리값 1
(true
)을 포함하는 배열을 반환합니다. 그렇지 않으면 이 배열은 논리값 0
(false
)을 포함합니다. 다음과 같은 경우 두 값 u
와 v
는 허용오차 범위 내에 있는 것입니다.
abs(u-v) <= tol*max(abs([A(:);B(:)]))
즉, ismembertol
은 데이터의 크기를 기반으로 하여 tol
입력값을 스케일링합니다.
ismembertol
은 ismember
와 유사합니다. ismember
는 정확한 비교를 수행하는 반면 ismembertol
은 허용오차를 사용하여 비교를 수행합니다.
[___] = ismembertol(___,
는 위에 열거된 구문에 나와 있는 입력 인수나 출력 인수 조합 중 하나를 사용하여 하나 이상의 이름-값 쌍의 인수로 지정된 추가적인 옵션을 사용합니다. 예를 들어, Name,Value
)ismembertol(A,B,'ByRows',true)
는 A
의 행과 B
의 행을 비교한 후 논리형 열 벡터를 반환합니다.
예제
벡터 x
를 만듭니다. x
를 변환한 후 이 변환된 값을 다시 역변환하여 두 번째 벡터 y
를 얻습니다. 이 변환 과정에서 y
에 반올림 차분이 발생합니다.
x = (1:6)'*pi; y = 10.^log10(x);
차분을 가져와서 x
와 y
가 동일하지 않은지 확인합니다.
x-y
ans = 6×1
10-14 ×
0.0444
0
0
0
0
-0.3553
ismember
를 사용하여 x
의 요소 중 y
에도 있는 요소를 찾습니다. ismember
함수는 정확한 비교를 수행한 후 x
의 행렬 요소 중 일부가 y
의 멤버가 아님을 확인합니다.
lia = ismember(x,y)
lia = 6×1 logical array
0
1
1
1
1
0
ismembertol
을 사용하여 작은 허용오차로 비교를 수행합니다. ismembertol
은 허용오차 범위 내에 있는 요소를 서로 같은 것으로 간주하여, x
의 모든 요소가 y
의 멤버임을 확인합니다.
LIA = ismembertol(x,y)
LIA = 6×1 logical array
1
1
1
1
1
1
기본적으로 ismembertol
은 허용오차 범위 내에 있는 요소를 찾지만, 허용오차 범위 내에 있는, 행렬의 행도 찾을 수 있습니다.
숫자형 행렬 A
를 만듭니다. A
를 변환한 후 변환을 해제하여 두 번째 행렬 B
를 얻습니다. 이 변환 과정에서 B
에 반올림 차분이 발생합니다.
A = [0.05 0.11 0.18; 0.18 0.21 0.29; 0.34 0.36 0.41; ...
0.46 0.52 0.76; 0.82 0.91 1.00];
B = log10(10.^A);
ismember
를 사용하여 A
의 행 중 B
에도 있는 행을 찾습니다. ismember
는 정확한 비교를 수행하여, 일부 행은 근소한 차이만 있을지라도 A
의 행 대부분이 B
의 멤버가 아님을 확인합니다.
lia = ismember(A,B,'rows')
lia = 5×1 logical array
0
0
0
0
1
ismembertol
을 사용하여 작은 허용오차로 행 비교를 수행합니다. ismembertol
은 허용오차 범위 내에 있는 행을 서로 같은 것으로 간주하여, A
의 모든 행이 B
의 멤버임을 확인합니다.
LIA = ismembertol(A,B,'ByRows',true)
LIA = 5×1 logical array
1
1
1
1
1
난수로 구성된 두 개의 벡터를 만든 다음, 허용오차를 사용하여 A
의 값 중 B
의 멤버이기도 한 값을 확인합니다. OutputAllIndices
를 true
로 지정하여 B
의 요소 중 A
의 대응하는 요소의 허용오차 범위 내에 있는 요소에 대한 모든 인덱스를 반환합니다.
rng(5)
A = rand(1,15);
B = rand(1,5);
[LIA,LocAllB] = ismembertol(A,B,0.2,'OutputAllIndices',true)
LIA = 1×15 logical array
1 0 1 0 1 1 1 1 1 1 0 1 1 1 0
LocAllB=1×15 cell array
{2×1 double} {[0]} {2×1 double} {[0]} {3×1 double} {2×1 double} {[4]} {3×1 double} {3×1 double} {2×1 double} {[0]} {2×1 double} {4×1 double} {2×1 double} {[0]}
B
의 요소 중 값 A(13)
의 허용오차 범위 내에 있는 요소의 평균값을 구합니다. 셀 LocAllB{13}
은 B
의 요소 중 A(13)
의 허용오차 범위 내에 있는 요소에 대한 모든 인덱스를 포함합니다.
A(13)
ans = 0.4413
allB = B(LocAllB{13})
allB = 1×4
0.2741 0.4142 0.2961 0.5798
aveB = mean(allB)
aveB = 0.3911
기본적으로 ismembertol
은 abs(u-v) <= tol*DS
형식의 허용오차 테스트를 사용합니다. 여기서 DS
는 입력 데이터의 크기를 기반으로 하여 자동으로 스케일링됩니다. DataScale
옵션과 함께 사용할 다른 DS
값을 지정할 수 있습니다. 그러나 절대 허용오차(여기서 DS
는 스칼라임)는 입력 데이터의 크기를 기반으로 하여 스케일링되지 않습니다.
먼저, 거리가 eps
만큼 떨어져 있는 두 개의 작은 값을 비교합니다. tol
과 DS
를 지정하여 허용오차 내 방정식 abs(u-v) <= 10^-6
을 만듭니다.
x = 0.1;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
1
그런 다음 값의 크기를 늘립니다. 계산 exp(log(x))
의 반올림 오차는 값의 크기 특히, eps(x)
에 비례합니다. 두 개의 큰 값이 서로 거리 eps
만큼 떨어져 있을지라도 eps(x)
는 이제 훨씬 더 큽니다. 따라서 10^-6
은 더 이상 적합한 허용오차가 아닙니다.
x = 10^10;
ismembertol(x, exp(log(x)), 10^-6, 'DataScale', 1)
ans = logical
0
DS
의 디폴트 (스케일링된) 값을 사용하여 이 문제를 해결합니다.
Y = [0.1 10^10]; ismembertol(Y, exp(log(Y)))
ans = 1×2 logical array
1 1
임의의 2차원 점 집합을 만든 다음, ismembertol
을 사용하여 작은 쿼리 점 집합 B
와 유사한(허용오차 범위 내) x 좌표를 갖는 점을 세로 띠로 그룹화합니다. 다음 옵션을 ismembertol
에 사용할 수 있습니다.
점 좌표가
A
의 행과B
의 행에 있으므로ByRows
를true
로 지정합니다.OutputAllIndices
를true
로 지정하여A
의 점 중B
의 쿼리 점의 허용오차 범위 내에 있는 x 좌표를 갖는 모든 점에 대해 인덱스를 반환합니다.DataScale을
[1 Inf]
로 지정하여 x 좌표에 대한 절대 허용오차를 사용하고 y 좌표는 무시합니다.
A = rand(1000,2); B = [(0:.2:1)',0.5*ones(6,1)]; [LIA,LocAllB] = ismembertol(B, A, 0.1, 'ByRows', true, ... 'OutputAllIndices', true, 'DataScale', [1,Inf])
LIA = 6×1 logical array
1
1
1
1
1
1
LocAllB=6×1 cell array
{ 94×1 double}
{223×1 double}
{195×1 double}
{212×1 double}
{187×1 double}
{ 89×1 double}
A
의 점 중 B
의 각 쿼리 점의 허용오차 범위 내에 있는 점을 플로팅합니다.
hold on plot(B(:,1),B(:,2),'x') for k = 1:length(LocAllB) plot(A(LocAllB{k},1), A(LocAllB{k},2),'.') end
입력 인수
쿼리 배열로, 스칼라, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 입력 인수 A
와 B
는 비희소(Full) 형식이어야 합니다.
ByRows
옵션을 지정할 경우 A
와 B
는 열 개수가 같아야 합니다.
데이터형: single
| double
쿼리 배열로, 스칼라, 벡터, 행렬, 다차원 배열 중 하나로 지정됩니다. 입력 인수 A
와 B
는 비희소(Full) 형식이어야 합니다.
ByRows
옵션을 지정할 경우 A
와 B
는 열 개수가 같아야 합니다.
데이터형: single
| double
비교 허용오차로, 양의 실수형 스칼라로 지정됩니다. ismembertol
은 입력 배열 A
와 B
의 최대 절댓값을 사용하여 tol
입력값을 스케일링합니다. 그런 다음 ismembertol
은 결과로 생성되는 스케일링된 비교 허용오차를 사용하여 A
의 요소 중 B
의 멤버이기도 한 요소를 확인합니다. 두 요소가 서로의 허용오차 범위 내에 있으면 ismembertol
은 이 두 요소를 같은 것으로 간주합니다.
abs(u-v) <= tol*max(abs([A(:);B(:)]))
인 경우 두 값 u
와 v
는 허용오차 범위 내에 있는 것입니다.
절대 허용오차를 지정하려면 tol
과 'DataScale'
이름-값 쌍을 모두 지정하십시오.
예: tol = 0.05
예: tol = 1e-8
예: tol = eps
데이터형: single
| double
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: LIA = ismembertol(A,B,'ByRows',true)
출력 인덱스 유형으로, 'OutputAllIndices'
와 함께 false
(디폴트 값), true
, 0
, 1
중 하나가 쉼표로 구분되어 지정됩니다. ismembertol
은 숫자 0
을 false
로 해석하고 숫자 1
을 true
로 해석합니다.
OutputAllIndices
가 true
이면 ismembertol
함수는 두 번째 출력값 LocB
를 셀형 배열로 반환합니다. 이 셀형 배열은 B
의 요소 중 A
의 대응값이 허용오차 범위 내에 있는 모든 요소에 대한 인덱스를 포함합니다. 즉, LocB
의 각 셀은 A
의 값에 대응하며, 각 셀의 값은 B
에서의 위치에 대응합니다.
예: [LIA,LocAllB] = ismembertol(A,B,tol,'OutputAllIndices',true)
행 비교 여부로, 'ByRows'
와 함께 false
(디폴트 값), true
, 0
, 1
중 하나가 쉼표로 구분되어 지정됩니다. ismembertol
은 숫자 0
을 false
로 해석하고 숫자 1
을 true
로 해석합니다. A
와 B
에서 허용오차 범위 내에 있는 행을 찾으려면 이 옵션을 사용하십시오.
ByRows
가 true
인 경우:
ismembertol
은 각 열을 별도로 고려하여A
와B
의 행을 비교합니다. 따라서A
와B
는 열 개수가 동일한 2차원 배열이어야 합니다.A
의 대응하는 행이B
의 행의 허용오차 범위 내에 있는 경우,LIA
는 논리값1
(true
)을 포함합니다. 그렇지 않으면 논리값0
(false
)을 포함합니다.
all(abs(u-v) <= tol*max(abs([A;B])))
인 경우 두 개의 행 u
와 v
는 허용오차 범위 내에 있는 것입니다.
예: LIA = ismembertol(A,B,tol,'ByRows',true)
데이터 스케일링으로, 'DataScale'
과 함께 스칼라 또는 벡터가 쉼표로 구분되어 지정됩니다. DataScale
을 숫자형 스칼라 DS
로 지정하여 허용오차 테스트를 abs(u-v) <= tol*DS
로 변경합니다.
ByRows
옵션과 함께 사용할 경우 DataScale
값은 벡터가 될 수도 있습니다. 이 경우 벡터의 각 요소는 A
의 대응하는 열에 대해 DS
를 지정합니다. DataScale
벡터의 값이 Inf
이면 ismembertol
은 A
의 대응하는 열을 무시합니다.
예: LIA = ismembertol(A,B,'DataScale',1)
예: [LIA,LocB] = ismembertol(A,B,'ByRows',true,'DataScale',[eps(1) eps(10) eps(100)])
데이터형: single
| double
출력 인수
A
에 대한 논리형 인덱스로, A
의 요소(또는 행)가 B
의 멤버(허용오차 범위 내)인 경우 항상 논리값 1
(true
)을 포함하는 벡터 또는 행렬로 반환됩니다. 그렇지 않으면 LIA
는 논리값 0
(false
)을 포함합니다.
ByRows
옵션을 지정하지 않는 한 LIA
는 A
와 크기가 같습니다. 이 옵션을 지정할 경우 LIA
는 A
와 행 개수가 동일한 열 벡터입니다.
B
에서의 위치로, 벡터, 행렬, 셀형 배열 중 하나로 반환됩니다. LocB
는 B
의 요소(또는 행) 중 A
에도(허용오차 범위 내) 있는 요소에 대한 인덱스를 포함합니다. LocB
는 A
의 요소가 B
의 멤버가 아닌 경우 항상 0
을 포함합니다.
기본적으로 LocB
의 각 요소는 A
의 대응하는 요소의 허용오차 범위 내에 있는 B
의 첫 번째 요소에 대한 인덱스입니다. 대신 OutputAllIndices
를 true
로 지정하면 B
의 요소 중 A
의 대응값이 허용오차 범위 내에 있는 모든 요소에 대한 인덱스가 포함된 셀형 배열로 LocB
를 반환합니다. 즉, LocB
의 각 셀은 A
의 값에 대응하며, 각 셀의 값은 허용오차 범위 내에 있는 B
의 요소에 대한 인덱스입니다.
ByRows
옵션을 지정하지 않는 한 LocB
는 A
와 크기가 같습니다. 이 옵션을 지정할 경우 LocB
는 A
와 행 개수가 동일한 열 벡터입니다.
확장 기능
이 함수는 스레드 기반 환경을 완전히 지원합니다. 자세한 내용은 스레드 기반 환경에서 MATLAB 함수 실행하기 항목을 참조하십시오.
ismembertol
함수는 GPU 배열 입력값을 지원하지만 다음과 같은 사용법 관련 참고 및 제한 사항이 있습니다.
'ByRows'
인수와'OutputAllIndices'
인수는 지원되지 않습니다.64비트 정수는 지원되지 않습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2015a에 개발됨
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)