scipp.where#

scipp.where(condition, x, y)#

Return elements chosen from x or y depending on condition.

Parameters:
Returns:

Variable | DataArray – Array with elements from x where condition is True and elements from y elsewhere.

Examples

Select values based on a condition:

>>> import scipp as sc
>>> x = sc.array(dims=['x'], values=[1.0, 2.0, 3.0, 4.0, 5.0], unit='m')
>>> condition = x > sc.scalar(3.0, unit='m')
>>> condition
<scipp.Variable> (x: 5)       bool        <no unit>  [False, False, ..., True, True]
>>> y = sc.array(dims=['x'], values=[10.0, 20.0, 30.0, 40.0, 50.0], unit='m')
>>> z = sc.array(dims=['x'], values=[100.0, 200.0, 300.0, 400.0, 500.0], unit='m')
>>> sc.where(condition, y, z)
<scipp.Variable> (x: 5)    float64              [m]  [100, 200, ..., 40, 50]

With a DataArray, coordinates are preserved:

>>> da1 = sc.DataArray(
...     data=sc.array(dims=['x'], values=[1, 2, 3], unit='K'),
...     coords={'x': sc.arange('x', 3, unit='m')}
... )
>>> da2 = sc.DataArray(
...     data=sc.array(dims=['x'], values=[10, 20, 30], unit='K'),
...     coords={'x': sc.arange('x', 3, unit='m')}
... )
>>> cond = sc.array(dims=['x'], values=[True, False, True])
>>> sc.where(cond, da1, da2)
<scipp.DataArray>
Dimensions: Sizes[x:3, ]
Coordinates:
* x                           int64              [m]  (x)  [0, 1, 2]
Data:
                              int64              [K]  (x)  [1, 20, 3]