# How can I average the vectors within the grid cell?

5 views (last 30 days)

Show older comments

Ashfaq Ahmed
on 7 Feb 2022

Commented: Turlough Hughes
on 7 Feb 2022

Hi altruists,

Suppose, I generated this simple vetor field using these few lines of codes:

[X,Y] = meshgrid(0:6,0:6);

U = 0.25*X;

V = 0.5*Y;

[Xq,Yq] = meshgrid(-6:0.25:6);

Uq = interp2(X,Y,U,Xq,Yq);

Vq = interp2(X,Y,V,Xq,Yq);

figure,

quiver(Xq,Yq,Uq,Vq,'autoscale','on');

grid on

title('Vector field','fontweight','bold', 'fontsize',20);

So, I get this grid -

Now - without considering 'all' these vectors, I simply want to take only one vector from each of the grid cell. The vector should be the average of all the vectors within that grid cell. The outcome should be like this -

So, the each of the grid cell is containing only one 'averaged' vector. In picture, it's shown in red (the value is exaggerated). Ciould you please give me an idea on how can I possibly do it?

##### 0 Comments

### Accepted Answer

Turlough Hughes
on 7 Feb 2022

% code provided in the question

[X,Y] = meshgrid(0:6,0:6);

U = 0.25*X;

V = 0.5*Y;

[Xq,Yq] = meshgrid(0:0.25:6);

Uq = interp2(X,Y,U,Xq,Yq);

Vq = interp2(X,Y,V,Xq,Yq);

figure,

quiver(Xq,Yq,Uq,Vq,'autoscale','on');

grid on

title('Vector field','fontweight','bold', 'fontsize',20);

axis equal

You could block process the data taking the averages of each block as follows

m = 5; n = 5;

f = @(D,m,n) blockproc(D,[m n],@(block_struct) mean(block_struct.data,'all'));

Xd = f(Xq,m,n);

Yd = f(Yq,m,n);

Ud = f(Uq,m,n);

Vd = f(Vq,m,n);

hold on, quiver(Xd,Yd,Ud,Vd,'Color','red')

Is that what you meant?

##### 3 Comments

Turlough Hughes
on 7 Feb 2022

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!