islocalmax

국소 최댓값 구하기

설명

예제

TF = islocalmax(A)는 배열, 테이블 또는 타임테이블의 요소에서 국소 최댓값이 발견되면 이에 대응하는 요소가 1(true)인 논리형 배열을 반환합니다.

TF = islocalmax(A,dim)은 함수 동작이 수행될 A의 차원을 지정합니다. 예를 들어, islocalmax(A,2)는 행렬 A를 구성하는 각 행의 국소 최댓값을 구합니다.

예제

TF = islocalmax(___,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 국소 최댓값을 구하기 위한 추가 파라미터를 지정합니다. 예를 들어, islocalmax(A,'SamplePoints',t)는 시간 벡터 t에 포함된 타임스탬프 값 대비 A의 국소 최댓값을 구합니다.

예제

또한 [TF,P] = islocalmax(___)는 위에 열거된 구문을 사용하여, A의 각 요소에 대응하는 돌출부도 반환합니다.

예제

모두 축소

벡터 데이터의 국소 최댓값을 계산하고 플로팅합니다.

x = 1:100;
A = (1-cos(2*pi*0.01*x)).*sin(2*pi*0.15*x);
TF = islocalmax(A);
plot(x,A,x(TF),A(TF),'r*')

행렬을 만들고 각 행에 대한 국소 최댓값을 계산합니다.

A = 25*diag(ones(5,1)) + rand(5,5);
TF = islocalmax(A,2)
TF = 5x5 logical array

   0   0   1   0   0
   0   1   0   0   0
   0   0   1   0   0
   0   1   0   1   0
   0   1   0   0   0

벡터 t의 타임스탬프 값에 대한 데이터로 구성된 벡터의 국소 최댓값을 계산합니다. 'MinSeparation' 파라미터를 사용하여 45분 이상의 간격을 두는 국소 최댓값을 계산합니다.

t = hours(linspace(0,3,15));
A = [2 4 6 4 3 7 5 6 5 10 4 -1 -3 -2 0];
TF = islocalmax(A,'MinSeparation',minutes(45),'SamplePoints',t);
plot(t,A,t(TF),A(TF),'r*')

연속적으로 나타나는 국소 최댓값을 표시하는 방법을 지정합니다.

연속적으로 국소 최댓값이 나타나는 데이터의 국소 최댓값을 계산합니다. 이 값이 처음 나타나는 지점을 보여주며 각 평탄 영역의 최대점을 표시합니다.

x = 0:0.1:5;
A = min(0.75, sin(pi*x));
TF1 = islocalmax(A, 'FlatSelection', 'first');
plot(x,A,x(TF1),A(TF1),'r*')

이 값이 나타나는 모든 지점을 보여주며 각 평탄 영역의 최대점을 표시합니다.

TF2 = islocalmax(A, 'FlatSelection', 'all');
plot(x,A,x(TF2),A(TF2),'r*')

돌출부에 기반한 국소 최댓값을 선택합니다.

벡터 데이터의 국소 최댓값과 돌출부를 계산한 다음 데이터와 함께 플로팅합니다.

x = 1:100;
A = peaks(100);
A = A(50,:);
[TF1,P] = islocalmax(A);
P(TF1)
ans = 1×2

    1.7703    3.5548

plot(x,A,x(TF1),A(TF1),'r*')
axis tight

최소 돌출부 요구 사항을 지정하여 데이터에서 가장 돌출된 최대점만 계산합니다.

TF2 = islocalmax(A,'MinProminence',2);
plot(x,A,x(TF2),A(TF2),'r*')
axis tight

입력 인수

모두 축소

입력 데이터로, 벡터, 행렬, 다차원 배열, table형 또는 timetable형으로 지정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | table | timetable

연산 차원으로, 양의 정수 스칼라로 지정됩니다. 기본적으로 islocalmax는 크기가 1이 아닌 첫 번째 차원을 따라 동작합니다.

예를 들어, A가 행렬이면 islocalmax(A,1)A의 행에서 연산을 수행해 각 열에 대한 국소 최댓값을 계산합니다.

islocalmax(A,2)A의 열에서 연산을 수행해 각 행에 대한 국소 최댓값을 계산합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: TF = islocalmax(A,'MinProminence',2)

최소 돌출부로, 'MinProminence'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다. islocalmax는 최소 지정된 값 이상인 돌출부를 갖는 국소 최댓값만 반환합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

돌출부 윈도우로, 'ProminenceWindow'와 함께 양의 정수 스칼라, 양의 정수로 구성된 요소를 2개 가진 벡터, 양의 duration형 스칼라 또는 양의 duration형으로 구성된 요소를 2개 가진 벡터가 쉼표로 구분되어 지정됩니다. 이 값은 각 국소 최댓값의 돌출부를 계산할 인접 점의 윈도우를 정의합니다.

윈도우 값이 양의 정수 스칼라 k인 경우 윈도우는 각 국소 최댓값의 인근 지점에 중심을 두며, k-1개의 인접 요소를 가집니다. k가 짝수이면 윈도우의 중심은 현재 요소 및 이전 요소가 됩니다. 국소 최댓값이 평탄 영역 내에 있는 경우 islocalmax는 전체 평탄 영역을 윈도우의 중심점으로 취급합니다.

이 값이 양의 정수 요소를 2개 가진 벡터 [b f]인 경우 윈도우에는 국소 최댓값, 국소 최댓값의 역방향으로 b개 요소, 그리고 국소 최댓값의 정방향으로 f개 요소가 포함됩니다. 국소 최댓값이 평탄 영역 내에 있는 경우 윈도우는 평탄 영역의 첫 번째 점으로부터 b개 요소 앞에서 시작하고 평탄 영역의 마지막 점으로부터 f개 요소 뒤에서 끝납니다.

입력 데이터가 timetable형이거나 'SamplePoints'datetime형 또는 duration형 벡터로 지정된 경우 윈도우 값은 duration형이어야 하며, 윈도우는 샘플 점을 기준으로 하여 계산됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

국소 최댓값이 연속으로 반복되는 경우에 대한 평탄 영역 표시자로, 'FlatSelection'과 함께 다음 중 하나가 쉼표로 구분되어 지정됩니다.

  • 'center' — 평탄 영역의 중앙 요소만 국소 최댓값으로 나타냅니다. 평탄 영역의 중앙에 해당하는 TF의 요소가 1이 되고 나머지 요소는 0이 됩니다.

  • 'first' — 평탄 영역의 첫 번째 요소만 국소 최댓값으로 나타냅니다. 평탄 영역의 시작 지점에 해당하는 TF의 요소가 1이 되고 나머지 요소는 0이 됩니다.

  • 'last' — 평탄 영역의 마지막 요소만 국소 최댓값으로 나타냅니다. 평탄 영역의 끝 지점에 해당하는 TF의 요소가 1이 되고 나머지 요소는 0이 됩니다.

  • 'all' — 평탄 영역의 모든 요소를 국소 최댓값으로 나타냅니다. 평탄 영역에 해당하는 모든 TF의 요소가 1이 됩니다.

'MinSeparation' 또는 'MaxNumExtrema' 이름-값 쌍을 사용하면 평탄 영역의 점들은 다 같이 하나의 국소 최댓값으로 간주됩니다.

국소 최댓값 간의 최소 간격으로, 'MinSeparation'와 함께 음이 아닌 스칼라가 쉼표로 구분되어 지정됩니다. 간격 값은 샘플 점 벡터와 같은 단위로 정의되며, 이것은 기본적으로 [1 2 3 ...]입니다. 간격 값이 0보다 크면 islocalmax는 가장 큰 국소 최댓값을 선택하고 지정된 간격 내 다른 모든 국소 최댓값은 무시합니다. 이 과정은 더 이상 국소 최댓값이 발견되지 않을 때까지 반복됩니다.

샘플 점 벡터가 datetime형을 사용할 경우 간격 값은 duration형을 사용해야 합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | duration

찾을 국소 최댓값의 최대 개수로, 'MaxNumExtrema'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다. islocalmax는 지정된 최대 개수만큼의 가장 두드러진 국소 최댓값을 찾습니다. 이 개수는 기본적으로 연산 차원의 길이입니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

샘플 점으로, 'SamplePoints'와 함께 벡터가 쉼표로 구분되어 지정됩니다. 샘플 점은 A에 있는 데이터의 위치를 나타냅니다. 샘플 점은 균일하게 샘플링할 필요가 없지만, 고유한 요소로 정렬되어야 합니다. 기본적으로, 샘플 점 벡터는 [1 2 3 ...]입니다.

입력 데이터가 timetable형인 경우 islocalmax는 이 이름-값 쌍을 지원하지 않습니다.

데이터형: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | datetime | duration

테이블 변수로, 'DataVariables'와 함께 변수 이름, 변수 이름으로 구성된 셀형 배열, 숫자형 벡터, 논리형 벡터 또는 함수 핸들이 쉼표로 구분되어 지정됩니다. 'DataVariables' 값은 입력 테이블 또는 타임테이블에서 계산을 수행할 열을 나타냅니다. 이 값은 다음 중 하나일 수 있습니다.

  • 단일 테이블 변수 이름을 지정하는 문자형 벡터

  • 각 요소가 테이블 변수 이름인, 문자형 벡터로 구성된 셀형 배열

  • 테이블 변수 인덱스로 구성된 벡터

  • 각각의 요소가 테이블 변수에 해당하는 논리형 벡터. 여기서 true는 해당하는 변수를 포함하고 false는 해당하는 변수를 제외합니다.

  • 테이블 변수를 입력값으로 받고 논리형 스칼라를 반환하는 함수 핸들

지정한 테이블 변수는 숫자형 또는 logical형이어야 합니다.

예: 'Age'

예: {'Height','Weight'}

예: @isnumeric

데이터형: char | cell | double | single | logical | function_handle

출력 인수

모두 축소

국소 최댓값 표시자로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. TFA와 크기가 동일합니다.

데이터형: logical

돌출부로, 벡터, 행렬 또는 다차원 배열로 반환됩니다. PA와 크기가 동일합니다.

입력 데이터의 유형이 부호 있는 정수나 부호 없는 정수인 경우, P는 부호 없는 정수가 됩니다.

세부 정보

모두 축소

국소 최댓값의 돌출부

국소 최댓값(피크라고도 함)의 돌출부는 어떠한 피크가 높이와 위치 측면에서 다른 피크에 비해 얼마나 두드러지는지를 측정합니다.

피크의 돌출부를 측정하려면 먼저 피크 지점에서 수평선을 좌우 방향으로 연장하여 그리십시오. 이 선이 왼쪽과 오른쪽에 있는 데이터와 교차하는 지점을 찾아보십시오. 이 지점은 다른 피크이거나 데이터의 끝이 될 수 있습니다. 이러한 위치를 왼쪽 간격과 오른쪽 간격의 외부 끝점으로 표시합니다. 다음으로, 두 간격 모두에서 최저 밸리를 찾습니다. 두 밸리 중 더 큰 것을 채택하고 그 밸리에서 피크까지 수직 거리를 측정합니다. 이 거리가 돌출부입니다.

벡터 x의 경우, 최대 돌출부는 최대 max(x)-min(x)입니다.

확장 기능

R2017b에 개발됨