# HOW TO GROUP THE ELEMENTS OF AN ARRAY

조회 수: 6(최근 30일)
simone zappalà 2022년 5월 10일
답변: Image Analyst 2022년 5월 10일
I've a 252*51 array, i want to group it three-by-three elements and do mean of these groups one-by-one, creating a new array 84*51 which every row is the mean of three elements of the first array

댓글을 달려면 로그인하십시오.

### 채택된 답변

dpb 2022년 5월 10일
One of those cases where the optimal way depends upon being familiar with internal array storage order being column-major and manipulation of orientation/shape to take advantage of vector operations --
nRowToAvg=3;
mnAbynRowToAvg=reshape(mean(reshape(A,nRowToAvg,[])),[],size(A,2));

댓글을 달려면 로그인하십시오.

### 추가 답변(2개)

Prakash S R 2022년 5월 10일
편집: Prakash S R 2022년 5월 10일
A more "arithmetic" approach:
So you want to take a 252x51 matrix X and produce a 84x51 matrix Y, right? I would suggest premultiplying X with a 84x252 matrix A that sums successive rows with weights of 1/3.
Thus, Y = (1/3)*A*X, where A has the form
[1 1 1 0 0 0 0 0 0 0 0....
0 0 0 1 1 1 0 0 0 0 0...
0 0 0 0 0 0 1 1 1 0 0 ...
:
0 0 0 ... 1 1 1]
You can construct A using
aa = [[1 1 1], zeros(1,249)];
Atmp = triu(toeplitz(aa));
A = Atmp(1:3:end, :);
##### 댓글 수: 0표시숨기기 이전 댓글 수: -1

댓글을 달려면 로그인하십시오.

Image Analyst 2022년 5월 10일
One way is to use blockproc(). It's in the Image Processing Library.
meanFilterFunction = @(theBlockStructure) mean(theBlockStructure.data(:)); % Define mean function.
blockSize = [3, 3]; % Whatever window size you want.
% Get an output image where each pixel is the average of a 3x3 window in
% the original image.
blockyImage = blockproc(grayImage, blockSize, meanFilterFunction);
I'm attaching a script with several ways to use it. Adapt as needed.

댓글을 달려면 로그인하십시오.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by