## How to use accumarray?

on 30 Jun 2013

### the cyclist (view profile)

I have a matrix of y=[9, 5346]

I want to find the the mean of every six values of each row. I tried this function but can't really figure out how to do it

``` for ii=1:9
oo(ii)=accumarray(1:6:5346,y(ii,:),,[],@mean);
end```

it's saying there is error in this code . I don't really know how this accumarray works.

Any help is appreciated

## Products

No products are associated with this question.

### the cyclist (view profile)

on 30 Jun 2013
Edited by the cyclist

### the cyclist (view profile)

on 30 Jun 2013

accumarray() can be a bit tricky to learn. I think this solves your problem. I commented it to help you see what is happening.

```A = rand(9,5346); % Make up some fake data that is the same size as yours
At = A'; % Take the transpose, because accumarray works down columns.
```
```numberPerGroup = 6;
numberGroups = 5346/6; % 931, but wanted you to see where this comes from
```
```% The subs array indicates which rows (of the transposed array) are going to get grouped. You have 931 groups total, each gather 6 rows.
subs = repmat(1:numberGroups,[numberPerGroup,1]);
subs = subs(:);
```
```% Preallocate the output array
output = zeros(numberGroups,9);
```
```% Accumulate each column in turn
for nr = 1:9
output(:,nr) = accumarray(subs,At(:,nr),[],@mean);
end
```
```% Transpose the output back
output = output';
```

Ede gerlderlands

on 30 Jun 2013

Thank you ..

### Matt J (view profile)

on 30 Jun 2013

Although you can do this with accumarray, it will probably be faster to do

` oo=downsampn(y,[1,6]);`

using the function below.

```function M=downsampn(M,bindims)
%DOWNSAMPN - simple tool for downsampling n-dimensional nonsparse arrays
%
%  M=downsampn(M,bindims)
%
%in:
%
% M: an array
% bindims: a vector of integer binning dimensions
%
%out:
%
% M: the downsized array
```
```nn=length(bindims);
```
```[sz{1:nn}]=size(M); %M is the original array
sz=[sz{:}];
```
```newdims=sz./bindims;
```
```args=num2cell([bindims;newdims]);
```
```M=reshape(M,args{:});
```
```for ii=1:nn
```
`   M=mean(M,2*ii-1);`
```end
```
```M=reshape(M,newdims);
```

Ede gerlderlands

### Ede gerlderlands (view profile)

on 30 Jun 2013

Yes, thank you.

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi