num
Counts the number of True values in the input.
Prototype
function num ( val : logical ) return_val [1] : integer or long
Arguments
valAn array of logical values of any dimensionality.
Description
This function counts the number of True values in the input, ignoring missing values.
All numerical values except for 0 evaluate to True.
As of version 6.0.0, this function will return type "long" if the count is greater than or equal to 2 GB.
See Also
Examples
Example 1
The following is a simple example that should print the value "2":
a = (/1,2,3,4,5/) print(num(a.gt.3))
Example 2
To count the number of non-missing values in an array, use the ismissing function. The input array must have the _FillValue attribute set:
N = num(.not.ismissing(x))
Example 3
Assume x is a four-dimensional array with dimensions ntim x klev x nlat x mlon. Use ismissing and num to count the number of missing values at each level and time, and print out the number as a percent of the total:
NM = 100./(nlat*mlon) ; the 100. will force NM to be type float do nt=0,ntim-1 do kl=0,klev-1 N = num(ismissing(x(nt,kl,:,:))) PC= N/NM print ("nt="+nt+" kl="+kl+" N="+N+" %="+PC) end do end do
Example 4
Compute the joint pdf of two variables C and V. This arose from a question sent to ncl-talk.
begin N = 10000 c = random_normal ( 0,5,N) v = random_normal ( 0,5,N) nc_bin = 51 ; => 50 bins nv_bin = 41 ; => 40 bins c_bin = fspan(-10,10,nc_bin) v_bin = fspan(-5 ,20,nv_bin) count = new ( (/nc_bin,nv_bin/) , integer) count = 0 ; initialize to 0 do ic=0,nc_bin-2 do iv=0,nv_bin-2 count(ic,iv) = num(c.ge.c_bin(ic) .and. c.lt.c_bin(ic+1) .and. \ v.ge.v_bin(iv) .and. v.lt.v_bin(iv+1) ) if (count(ic,iv).gt.0) then print("ic="+ic+" iv="+iv+" count="+count(ic,iv) ) end if end do end do fpc = (100.*count)/N ; frequency [%] (nc_bin,nv_bin) printVarSummary(fpc) K = sum( count ) ; < N F = sum( fpc ) print("------") print("K="+K+" F[%]="+F) print("------") ; extra stuff cbmin = min(c_bin) cbmax = max(c_bin) vbmin = min(v_bin) vbmax = max(v_bin) ; count corner outlier cases k1 = num (c.lt.cbmin .and. v.lt.vbmin) k2 = num (c.lt.cbmin .and. v.ge.vbmax) k3 = num (c.ge.cbmax .and. v.lt.vbmin) k4 = num (c.ge.cbmax .and. v.ge.vbmax) ; one outlier, one not k5 = num (c.lt.cbmin .and. v.ge.vbmin .and. v.lt.vbmax) k6 = num (c.ge.cbmax .and. v.ge.vbmin .and. v.lt.vbmax) k7 = num (v.lt.vbmin .and. c.ge.cbmin .and. c.lt.cbmax) k8 = num (v.ge.vbmax .and. c.ge.cbmin .and. c.lt.cbmax) KTOT = K + k1+ k2+ k3+ k4+ k5+ k6+ k7+ k8 print("k1="+k1) print("k2="+k2) print("k3="+k3) print("k4="+k4) print("k5="+k5) print("k6="+k6) print("k7="+k7) print("k8="+k8) print("------") print("KTOT="+KTOT) print("------") if (KTOT.eq.N) then print (" Lucky!!! Numbers add up. :-)") end if endSampled out includes:
ic=0 iv=1 count=1 ic=0 iv=2 count=2 [snip] ic=15 iv=0 count=8 ic=15 iv=1 count=10 ic=15 iv=2 count=8 ic=15 iv=3 count=8 ic=15 iv=4 count=15 ic=15 iv=5 count=11 ic=15 iv=6 count=12 ic=15 iv=7 count=10 ic=15 iv=8 count=16 ic=15 iv=9 count=13 ic=15 iv=10 count=14 [snip] ic=49 iv=16 count=2 ic=49 iv=17 count=3 ic=49 iv=19 count=1 --------- Variable: fpc Type: float Total Size: 8364 bytes 2091 values Number of Dimensions: 2 Dimensions and sizes: [51] x [41] --------- K=8014 F[%]=80.1399 k1=40 k2=0 k3=34 k4=0 k5=200 k6=181 k7=1529 k8=2 KTOT=10000 Lucky!!! Numbers add up. :-)