NCL Home > Documentation > Functions > Array query

dimsizes

Returns the dimension sizes of the input variable.

Prototype

	function dimsizes (
		var       
	)

	return_val [*] :  integer or long

Arguments

var

Any NCL variable.

Return value

An array of the same length as the number of dimensions of data. In versions 5.x or earlier, this function always returns an integer array. In versions 6.0.0 or later, this function may return a long array. See below.

Description

The dimsizes function returns an array of dimension sizes for the parameter data. Each index in the array corresponds to the dimension number of the same value.

As of version 6.0.0, this function will return type "long" if the product of the dimension sizes is greater than or equal to 2 GB.

If the dimension sizes are also desired, then dimsizes returns the dimension sizes in the same order as the dimension names returned from getvardims / getvardimnames.

See Also

getvardims, getvardimnames, typeof, sizeof, new, default_fillvalue, set_default_fillvalue,

Examples

Example 1

  x = (/ (/1,2,3/), (/4,5,6/) /)
  print(dimsizes(x))          ; should be (/2,3/)

Example 2

Read a variable off a NetCDF file and print the dimension sizes and names.

   a = addfile("$NCARG_ROOT/lib/ncarg/data/cdf/meccatemp.cdf","r")
   t = a->t
   print(getvardimnames(t) + " : " + dimsizes(t))
Output:

(0)     time : 31
(1)     lat : 40
(2)     lon : 49

Example 3

You can use dimsizes to return the rank (that is, the number of dimensions) of a variable:

  x = new((/20,10,30,10,10/),float)
  rank = dimsizes(dimsizes(x))       ; rank should be 5

Example 4

Assume x is a 4D array dimensioned ntim x klev x nlat x mlon. You can use dimsizes to assign the dimension sizes to individual variables:

  dsizes_x = dimsizes(x)
  ntim     = dsizes_x(0)
  klev     = dsizes_x(1)
  nlat     = dsizes_x(2)
  mlon     = dsizes_x(3)

Example 5

If you are running NCL V6.x on a 64-bit machine, then note how changing the size of the array can change whether dimsizes returns an "int" or a "long".

  isize   = tolong(2^31)   ;   2147483648
  isizem1 = isize - 1

; dimsizes will return int
  x1dm1      = new(isizem1,float)
  x1dm1_dims = dimsizes(x1dm1)
  print(x1dm1_dims)    ; int

; dimsizes will return long
  x1d      = new(isize,float)
  x1d_dims = dimsizes(x1d)
  print(x1d_dims)

; dimsizes will return long
  lng_dims = (/8,8,8,8,8,8,8,8,8,16l/) ; The product is == 2 GB
  xnd      = new(lng_dims,integer)
  xnd_dims = dimsizes(xnd)
  print(xnd_dims)