# index out of bounds because numel(averg)=1

Asked by Benjamin on 8 Aug 2012
Latest activity Commented on by Sean de Wolski on 8 Aug 2012

This is the code that I'm currently using:

``` A = interpolate;
averg = mean([A(1:end-2),A(3:end)],2);
streaking = [];
for idx = 2:size(A,2)-1
streaking(:,idx) = (abs(A(:,idx)-averg(idx))./averg(idx))*100;
end ```

The full error message:

>> Attempted to access averg(2); index out of bounds because numel(averg)=1.

>> Error in rad_cal2 (line 817)

`    streaking(:,idx) = (abs(A(:,idx)-averg(idx))./averg(idx))*100;`

interpolate is a matrix

## Products

No products are associated with this question.

Answer by Laura Proctor on 8 Aug 2012
Edited by Laura Proctor on 8 Aug 2012

You are using linear indexing to index into A, and so the output is a row vector. For example: A(1:end-2) will take all terms except for the last two in the matrix A, and create a row vector. Concatenating A(1:end-2) with A(3:end) creates a really long row vector. The mean of a row vector along the row, takes the average of all the elements which produces a scalar value for averg.

If you want to take the ROWS 1:end-2, then you can index into A using row column indexing:

```A(1:end-2,:)
```

For what values are you trying to find the means? How are you trying to arrange the values in A to find the means? Be careful how you find that matrix ([A(1:end-2),A(3:end)]) - you may want to add an intermediate variable to calculate it, and then find the mean.

```A = interpolate;
B = (A(1:end-2,:) + A(3:end,:))/2;
averg =   mean(B,2)
```

modified accordingly.

Sean de Wolski on 8 Aug 2012
```averg2 = conv2(A,ones(3,1)./3,'valid');
```
Benjamin on 8 Aug 2012

Is there any benefit to using your input Sean opposed to Laura's method? If there is how would you adapt it to this:

` averg = (A(1:end-2,:) + A(3:end,:))/2;`
Sean de Wolski on 8 Aug 2012

No, just a different approach. More adaptable if say you wanted to use a longer window length. E.g. to change mine to include 5 elements one each side:

```averg2 = conv2(A,ones(11,1)./11,'valid');
```

```averg2 = conv2(A,[0.5;0;0.5],'valid')