The MIN function returns the value of the smallest element of *Array*. The type of the result is the same as that of *Array*.

## Examples

; Create a simple two-dimensional array:

D = DIST(100)

; Find the minimum value in array D and print the result:

PRINT, MIN(D)

## Syntax

*Result* = MIN( *Array* [, *Min_Subscript*] [, /ABSOLUTE] [, DIMENSION=*value*] [, MAX=*variable*] [, /NAN] [, SUBSCRIPT_MAX=*variable*])

## Return Value

Returns the smallest array element value.

## Arguments

### Array

The array to be searched.

### Min_Subscript

A named variable that, if supplied, is converted to a long integer containing the one-dimensional subscript of the minimum element. Otherwise, the system variable !C is set to the one-dimensional subscript of the minimum element.

## Keywords

### ABSOLUTE

If this keyword is set, then the absolute value of each element is used when determining the minimum values. This keyword has no effect for arrays of type byte or unsigned integer.

**Note: **If ABSOLUTE is set then the sign of each value is ignored when searching for the minimum. However, the return value retains the negative sign if the value was indeed negative.

**Tip: **For complex input, MIN by default only compares the real component of each value. Use the ABSOLUTE keyword to force MIN to compare the absolute value of each value, and to return the complex value corresponding to the minimum absolute value.

### DIMENSION

Set this keyword to the dimension over which to find the minimum values of an array. If this keyword is not present or is zero, the minimum is found over the entire array and is returned as a scalar value. If this keyword is present and nonzero, the result is the “slice” of the input array that contains the minimum value element, and the return values for *Result*, *Min_Subscript*, MAX, and SUBSCRIPT_MAX will all be arrays of one dimension less than the input array. That is, if the dimensions of *Array* are *N1*, *N2*, *N3*, and DIMENSION=2, the dimensions of the result are (*N1*, *N3*), and element (*i*,*j*) of the result contains the minimum value of *Array*[*i*, *, *j*].

For example:

arr = FINDGEN(2,3,2)

PRINT, arr

IDL prints:

0.00000 1.00000

2.00000 3.00000

4.00000 5.00000

6.00000 7.00000

8.00000 9.00000

10.0000 11.0000

PRINT, MIN(arr, DIMENSION=2)

IDL prints:

0.00000 1.00000

6.00000 7.00000

PRINT, MIN(arr, DIMENSION=1)

IDL prints:

0.00000 2.00000 4.00000

6.00000 8.00000 10.0000

### MAX

The name of a variable to receive the value of the maximum array element. If you need to find both the minimum and maximum array values, use this keyword to avoid scanning the array twice with separate calls to MAX and MIN.

### NAN

Set this keyword to cause the routine to check for occurrences of the IEEE floating-point values *NaN* or *Infinity* in the input data. Elements with the value *NaN* or *Infinity* are treated as missing data.

**Note: **If the MIN function is run on an array containing NaN values and the NAN keyword is not set, the NaN values will still be treated as missing data but a floating-point warning may occur.

### SUBSCRIPT_MAX

Set this keyword to a named variable that will contain the one-dimensional subscript of the maximum element, the value of which is available via the MAX keyword.

### Thread Pool Keywords

This routine is written to make use of IDL’s *thread pool*, which can increase execution speed on systems with multiple CPUs. The values stored in the !CPU system variable control whether IDL uses the thread pool for a given computation. In addition, you can use the thread pool keywords TPOOL_MAX_ELTS, TPOOL_MIN_ELTS, and TPOOL_NOTHREAD to override the defaults established by !CPU for a single invocation of this routine. See Thread Pool Keywords for details.

## Version History

Original |
Introduced |

6.1 |
Added ABSOLUTE keyword. |

8.5.1 |
Always treat NaN's as missing values. |

## See Also

ARRAY_INDICES, MAX, The IDL Thread Pool, Thread Pool Keywords, WHERE