수색…


소개

accumarray 사용하면 배열의 항목을 다양한 방법으로 집계하여 잠재적으로 프로세스의 항목에 일부 기능을 적용 할 수 있습니다. accumarray 는 경량 감속기 로 생각할 수 있습니다 ( MapReduce 소개 참조).

이 항목에는 accumarray 가 특히 유용한 일반적인 시나리오가 포함됩니다.

통사론

  • accumarray (하위 스크립트 배열, 값 배열)
  • accumarray (subscriptArray, valuesArray, sizeOfOutput)
  • accumarray (subscriptArray, valuesArray, sizeOfOutput, funcHandle)
  • accumarray (subscriptArray, valuesArray, sizeOfOutput, funcHandle, fillVal)
  • accumarray (하위 스크립트 배열, valuesArray, sizeOfOutput, funcHandle, fillVal, isSparse)

매개 변수

매개 변수 세부
subscriptArray 인덱스의 벡터, 인덱스의 행렬 또는 인덱스 벡터의 셀 배열로 지정된 첨자 행렬입니다.
valuesArray 벡터 또는 스칼라로 지정된 데이터
sizeOfOutput 출력 배열의 크기로, 양의 정수 벡터로 지정됩니다.
funcHandle 함수 핸들 또는 [] 로 지정된 집계 중에 각 항목 세트에 적용 할 함수입니다.
fillVal subs 값이 출력의 각 요소를 참조하지 않을 때의 채우기 값입니다.
isSparse 출력이 희소 배열이어야합니까?

비고

  • MATLAB v7.0에 도입되었습니다.

참고 문헌 :

  1. 2008 년 2 월 20 일 Loren Shure의 "Under- accumarray "
  2. accumarray 는 공식 MATLAB 문서에 있습니다.

다른 벡터로 그룹화 된 요소 중에서 최대 값 찾기

이것은 공식적인 MATLAB 예제입니다

다음 코드를 살펴보십시오.

month = [1;1;2;3;8;1;3;4;9;11;9;12;3;4;11];
temperature = [57;61;60;62;45;59;64;66;40;56;38;65;61;64;55];
maxTemp = accumarray(month,temperature,[],@max);

아래 이미지는이 경우에 accumarray 가 수행 한 계산 과정을 보여줍니다.

연산 처리의 설명

이 예에서, 동일한이 모든 값에 month 먼저 수집하고 4 번째 입력에 의해 지정된 기능하는 accumarray (이 경우 @max ) 각각의 이러한 세트에인가된다.

이미지 패치에 필터 적용 및 각 픽셀을 각 패치 결과의 평균으로 설정

현대의 많은 Image Processing 알고리즘을 사용하는 패치가 기본 요소입니다.
예를 들어 패치를 제거 할 수 있습니다 (BM3D 알고리즘 참조).

그러나 가공 된 패치를 이미지로 만들 때 동일한 픽셀에 대해 많은 결과가 나타납니다.
이를 처리하는 한 가지 방법은 동일한 픽셀의 모든 값의 평균 (경험적 평균)을 취하는 것입니다.

다음 코드는 이미지를 패치로 나누는 방법과 [accumarray()][1] 사용하여 평균을 사용하여 패치에서 이미지를 재구성하는 방법을 보여줍니다.

numRows = 5;
numCols = 5;

numRowsPatch = 3;
numColsPatch = 3;

% The Image
mI = rand([numRows, numCols]);

% Decomposing into Patches - Each pixel is part of many patches (Neglecting
% boundariwes, each pixel is part of (numRowsPatch * numColsPatch) patches).
mY = ImageToColumnsSliding(mI, [numRowsPatch, numColsPatch]);

% Here one would apply some operation which work on patches

% Creating image of the index of each pixel
mPxIdx = reshape(1:(numRows * numCols), [numRows, numCols]);

% Creating patches of the same indices
mSubsAccu = ImageToColumnsSliding(mPxIdx, [numRowsPatch, numColsPatch]);

% Reconstruct the image - Option A
mO = accumarray(mSubsAccu(:), mY(:)) ./ accumarray(mSubsAccu(:), 1);

% Reconstruct the image - Option B
mO = accumarray(mSubsAccu, mY(:), [(numRows * numCols), 1], @(x) mean(x));

% Rehsape the Vector into the Image
mO = reshape(mO, [numRows, numCols]);


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow