How do I sum over one dimension of a multidimensional array?
    29 views (last 30 days)
  
       Show older comments
    
    Nesha Wright
 on 21 Jun 2018
  
    
    
    
    
    Commented: Louis-Philippe Guinard
 on 25 Mar 2021
            I have four dimensions in a netcdf file: lat, long, sector and time. I want to sum over JUST sector. Is there a simple command to do this?
0 Comments
Accepted Answer
  Adam Danz
    
      
 on 21 Jun 2018
        
      Edited: Adam Danz
    
      
 on 21 Jun 2018
  
      Are you using ncread() or something similar to load the variable into the matlab workspace? If the variable is a matrix, you can use the 2nd input to sum() to sum across a specified dimension.
Example:
 r = rand(5,4,3,2); %4D data
 squeeze(sum(r,3)) %sums across the 3rd dim.
Squeeze() just removes the extra singleton dimensions.
2 Comments
  Walter Roberson
      
      
 on 21 Jun 2018
				ncinfo can give you information about the order the variables are in the file. But be careful because nc files are "row major" instead of "column major" -- that is, the memory storage varies most quickly across rows instead of down columns. Because of this it is common that you need to use permute() on the result of ncread() to get the data order you expect. For example,
TheArray = permute(TheArray, [2 1 3 4]);
When you are working with ncf data sets it is useful to pay close attention to the array sizes you get back compared to the length of the marginal index, to determine whether your first two dimensions need to be exchanged or not.
More Answers (1)
  Juan Fernandez
 on 21 Jun 2018
        Yes, there is a simple single command. Use the sum(A,dim) function. If this is not working, then provide additional information and perhaps I can be of more assistance.
5 Comments
  Adam Danz
    
      
 on 24 Mar 2021
				>  if I wanted to sum, say, just the N first elements of the 3rd dimension, how would one go about that?
sum(x(:,:,1:N), 3)
  Louis-Philippe Guinard
 on 25 Mar 2021
				I wasn't too far off, I did sum(x(:,:,1:N)) and returned a 1x256xN array. Aight thanks a lot! :)
See Also
Categories
				Find more on Creating, Deleting, and Querying Graphics Objects in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



