WHERE Function

Returns a longword vector containing the one-dimensional subscripts of the nonzero elements of the input array.

enabled.

Usage

result = WHERE(array_expr[, count ]) 

Input Parameters

array_expr — The array to be searched. May be of any data type. Both the real and imaginary parts of complex numbers must be zero for the number to be considered zero.

Note:

To ignore the imaginary parts of complex numbers, use WHERE(FLOAT(array)) or WHERE(DOUBLE(array)).

Output Parameters

count — (optional) If present, count is converted into a longword integer containing the number of nonzero elements found in array_expr. Must be a named variable.

Returned Value

result — A longword vector containing the one-dimensional subscripts of the nonzero elements of array_expr. The length is equal to the number of nonzero elements in array_expr.

Keywords

None.

Discussion

Frequently the result of WHERE is used as a vector subscript to select elements of an array using given criteria.

As a side effect, the system variable !Err is set to the number of nonzero elements. This is for compatibility with previous versions of PV‑WAVE. Therefore, it is recommended that the Count keyword be used in all new programs, rather than !Err.

Example 1

The WHERE function can be used to select a range of values in an array. For example:

; Create an array with 250 elements.
array = INDGEN(50, 5)
; Get the subscripts of those elements greater than 50 and less
; than 100. 
index = WHERE((array GT 50) AND (array LT 100))
; Put the selected values into result.
result = array(index)

Example 2

If all the elements of array_expr are zero, WHERE returns a scalar integer with a value of –1. If you attempt to use this result as an index into another array, you will get an error message about the subscripts being out of bounds. In some situations, code similar to the following can be used to avoid errors:

; Create an array.
array = INDGEN(7, 4)
PM, array
; PV-WAVE prints:
;       0       7      14      21
;       1       8      15      22
;       2       9      16      23
;       3      10      17      24
;       4      11      18      25
;       5      12      19      26
;       6      13      20      27
; Use count to get the number of nonzero elements greater or
; equal to 22.5.
index = WHERE(array GE 22.5, count)
; Only subscript the array if it's safe to do so.
IF (count GT 0) THEN array = array(index)
PM, array
; PV-WAVE prints:
;      23
;      24
;      25
;      26
;      27

Example 3

You can use WHERE to determine where an array of strings matches a specific pattern, or where the array of strings is non-NULL.

s = ['this', 'is', 'an', 'Where', 'of', 'strings']
PRINT, WHERE(s eq 'an')
; PV-WAVE prints: 2
s = ['this', '', '', 'Where', '', 'strings'] 
PRINT, WHERE(s)
; PV-WAVE prints: 0    3    5

See Also

LINSPACE, QUERY_TABLE, SORT, WHEREFIRST, WHEREIN, WHEREINVEC

System Variables: !Err

For more information, see the PV‑WAVE Programmer’s Guide.