# Average based on logical mask and condition

9 vues (au cours des 30 derniers jours)
nlm le 5 Nov 2018
Commenté : nlm le 6 Nov 2018
I want to average the data according to unique ID and a logical mask. I have 3 km logical mask which will average into perfect 36 km grid. I average into 36 km based on compartmentID I created. I'm having trouble, when I want to discard those 36 km grids when one of the 3 km grid is zero (based on logical mask ID). Size of the matrix is 406, 964 for 36 km grid which perfectly fit 4872, 11568 3 km grids.
%Form the ID's for 3 km grid so to average for 36 km grid.
rowId = ceil( (1 : 4872) / 12 );
colId = ceil( (1 : 11568) / 12 );
[colID, rowID] = meshgrid( colId, rowId );
compartmentID = colID + (rowID - 1) * max(colId);
Average = reshape(accumarray(compartmentID(:),reshape(Grid_3km,[],1), [],@mean,NaN ), 406, 964);
Can anyone help me with the condition, that says if one of the 3 km grid in 36 km is zero then discard the average.
##### 6 commentairesAfficher 4 commentaires plus anciensMasquer 4 commentaires plus anciens
nlm le 6 Nov 2018
Sorry, I could not attach it. It was larger than 5 Mb.
nlm le 6 Nov 2018
@JohnGalt Can you please elaborate ?

Connectez-vous pour commenter.

### Réponse acceptée

Bruno Luong le 6 Nov 2018
Just put NaN on the 3km-grid at the place you want to discard
then by using your working code on Grid_3km_Masked, it will propagate to the average on coarse-grid data result:
%Form the ID's for 3 km grid so to average for 36 km grid.
rowId = ceil( (1 : 4872) / 12 );
colId = ceil( (1 : 11568) / 12 );
[colID, rowID] = meshgrid( colId, rowId );
compartmentID = colID + (rowID - 1) * max(colId);
Average = reshape(accumarray(compartmentID(:),reshape(Grid_3km_Masked,[],1), [],@mean,NaN ), 406, 964);
##### 10 commentairesAfficher 8 commentaires plus anciensMasquer 8 commentaires plus anciens
Bruno Luong le 6 Nov 2018
Do you mind to post the final working version of the code? I'm curious to see what you want to compute.
nlm le 6 Nov 2018
I got with the code you suggested, I just needed to transpose the matrix. Mask thing did the trick. Thanks.

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by