NCL Home > Documentation > Functions > Array creators

# venn2_difference

Returns the unique element symmetric differences between two arrays.

Available in version 6.4.0 and later.

## Prototype

```load "\$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
; from NCL V6.2.0 onward.
; No need for user to explicitly load.

function venn2_difference (
a  : numeric, string, character,
b  : numeric, string, character
)

return_val [*] :  same type as a
```

## Arguments

a

An array of any type and size.

b

An array of the same type as a. It may have a different size and shape.

## Return value

A scalar or one-dimensional array containing the elements that form the difference of the input arrays. The result is independent of the input order.

## Description

The symmetric DIFFERENCE of two sets (here, a and b) is the set of elements which are in either of the sets and not in their intersection. For example: let A = (1,2,3) and B = (3,4,5). The DIFFERENCE of A and B, written A difference B = (1,2,4,5).

NCL has a limited suite of simple Venn_diagram functions: (i) venn2_difference, (ii) venn2_intersection and (iii) venn2_union. Pictoral depictions are here.

## Examples

Example 1: Return the unique different elements of two arrays. The result is independent of the input order.

```  A   = (/"a", "e", "i", "o", "u", "y" /)
B   = (/"a", "b", "c", "d", "e", "f", "g", "h" /)

ABd = venn2_difference(A, B)    ; ABd= (/"b","c","d","f","g","h","i","o","u","y" /)
```

Example 2: Return the unique different elements of three arrays. The result is independent of the input order.

```  A   = (/"a", "e", "i", "o", "u", "y" /)
B   = (/"a", "b", "c", "d", "e", "f", "g", "h" /)
C   = (/"a","b", "q", "y", "z"/)

AC  = array_append_record(A, C, 0) ; AC = (/"a","e","i","o","u","y","a", "b", "q", "y", "z"/)

ACBd = venn2_difference(AC,B)  ; ACBd= (/"c","d","f","g","h","i","o","q","u","y","z" /)

```

Example 3

```  date1 = (/"1979-01-01-00000","1979-01-02-00000","1979-01-08-00000","1979-01-06-00000" \
,"1980-12-12-00000","1981-01-02-00000","1988-05-06-00000","1988-05-06-00000" /)

date2 = (/"1979-05-01-00000","1979-01-01-00000","1979-01-06-00000","1981-01-02-00000" \
,"1981-01-02-00000","1987-01-02-00000","1988-05-06-00000"/)

DATE  = venn2_difference(date1, date2)   ; DATE = (/"1979-01-02-00000", "1979-01-08-00000" \
,"1979-05-01-00000", "1980-12-12-00000" \
,"1987-01-02-00000"/)
```

Example 4

The venn2_difference function allows arrays of different sizes and shapes.

```  y   = (/ (/1.5, 2.8, 1.6/), (/3.1, 1.5, 9.9/), (/2.8, 2.8, 2.8/) /)   ; 3 x 3
x   = (/   1.5, 1.6, 3.1, 2.8, 2.8 /)              ; [5]
yxd = venn2_difference(y, x)                  ; yxd = (/ 9.9 /)
```

Example 5: Use all three Venn based venn2_* functions.

```
models_rcp26 = (/"CanESM2", "CCSM4", "CESM1-CAM5", "CNRM-CM5", "CSIRO-Mk3-6-0"     \
,"FIO-ESM", "GFDL-CM3", "GFDL-ESM2G", "GFDL-ESM2M", "GISS-E2-H"    \
,"IPSL-CM5A-MR", "MIROC5", "MIROC-ESM", "MIROC-ESM-CHEM"           \
,"MPI-ESM-LR", "MPI-ESM-MR", "MRI-CGCM3", "NorESM1-M", "NorESM1-ME"/)

models_rcp45 = (/"ACCESS1-0", "ACCESS1-3", "bcc-csm1-1", "bcc-csm1-1-m", "BNU-ESM"     \
,"CanCM4", "CanESM2", "CCSM4", "CESM1-BGC", "CESM1-CAM5"               \
,"CESM1-CAM5-1-FV2", "CMCC-CM", "CMCC-CMS", "CNRM-CM5", "CSIRO-Mk3-6-0"\
,"CSIRO-Mk3L-1-2", "FIO-ESM", "GFDL-CM2p1", "GFDL-CM3", "GFDL-ESM2G"   \
,"GFDL-ESM2M", "GISS-E2-H", "GISS-E2-H-CC", "GISS-E2-R", "GISS-E2-R-CC"\
,"IPSL-CM5A-LR", "IPSL-CM5A-MR", "IPSL-CM5B-LR", "MIROC5", "MIROC-ESM" \
,"MIROC-ESM-CHEM", "MPI-ESM-LR", "MPI-ESM-MR", "MRI-CGCM3", "NorESM1-M"\
,"NorESM1-ME"/)

models_rcp85 = (/"ACCESS1-0", "ACCESS1-3", "bcc-csm1-1", "bcc-csm1-1-m", "BNU-ESM"     \
,"CanESM2", "CCSM4", "CESM1-BGC", "CESM1-CAM5", "CESM1-CAM5-1-FV2"     \
,"CMCC-CESM", "CMCC-CM", "CMCC-CMS", "CNRM-CM5", "CSIRO-Mk3-6-0", "FIO-ESM" \
,"GFDL-CM3", "GFDL-ESM2G", "GFDL-ESM2M", "GISS-E2-H", "GISS-E2-H-CC"   \
,"inmcm4", "IPSL-CM5A-LR", "IPSL-CM5A-MR", "IPSL-CM5B-LR", "MIROC5"    \
,"MIROC-ESM", "MIROC-ESM-CHEM", "MPI-ESM-LR", "MPI-ESM-MR", "MRI-CGCM3"\
,"MRI-ESM1", "NorESM1-M", "NorESM1-ME"/)

printVarSummary(models_rcp26)                                       ; 23
printVarSummary(models_rcp45)                                       ; 41
printVarSummary(models_rcp85)                                       ; 39

; Venn results on two data sets; all three operations

uu_rcp_2645 = venn2_union(models_rcp26, models_rcp45  )        ; union
print(uu_rcp_2645)

ui_rcp_2645 = venn2_intersection(models_rcp26, models_rcp45  ) ; intersection
print(ui_rcp_2645)

ud_rcp_2645 = venn2_difference(models_rcp26, models_rcp45  )   ; difference
print(ud_rcp_2645)

print("==================================")

; Use the above '2645'  results with the rcp_85

uu_rcp_2645_85 = venn2_union(uu_rcp_2645, models_rcp85  )
print(uu_rcp_2645_85)

ui_rcp_2645_85 = venn2_intersection(ui_rcp_2645, models_rcp85  )
print(ui_rcp_2645_85)

ud_rcp_2645_85 = venn2_difference(ud_rcp_2645, models_rcp85  )
print(ud_rcp_2645_85)

print("==================================")
```
The printed output is here.