# rescale

Scale range of array elements

## Syntax

``R = rescale(X)``
``R = rescale(X,a,b)``
``R = rescale(___,Name,Value)``

## Description

example

````R = rescale(X)` scales the entries of `X` to the interval [0,1]. The output array `R` is the same size as `X`.```

example

````R = rescale(X,a,b)` scales the entries of `X` to the interval [`a`,`b`].```

example

````R = rescale(___,Name,Value)` specifies additional parameters for rescaling using one or more name-value arguments. For example, `rescale(X,"InputMin",5)` sets all elements in `X` that are less than 5 equal to 5 before scaling to the range [0,1].```

## Examples

collapse all

Scale the entries of a vector to the interval [0,1].

```X = 1:5; R = rescale(X)```
```R = 1×5 0 0.2500 0.5000 0.7500 1.0000 ```

Scale the elements of a vector to the interval [-1,1].

```X = 1:5; R = rescale(X,-1,1)```
```R = 1×5 -1.0000 -0.5000 0 0.5000 1.0000 ```

Scale each column of a matrix to the interval [0,1] by specifying the minimum and maximum of each column. `rescale` scales along the dimension of the input array that corresponds with the shape of the values of `InputMin` and `InputMax`.

`X = magic(3)`
```X = 3×3 8 1 6 3 5 7 4 9 2 ```
`colmin = min(X)`
```colmin = 1×3 3 1 2 ```
`colmax = max(X)`
```colmax = 1×3 8 9 7 ```
`Rcol = rescale(X,"InputMin",colmin,"InputMax",colmax)`
```Rcol = 3×3 1.0000 0 0.8000 0 0.5000 1.0000 0.2000 1.0000 0 ```

Scale each row of `X` to the interval [0,1].

`rowmin = min(X,[],2)`
```rowmin = 3×1 1 3 2 ```
`rowmax = max(X,[],2)`
```rowmax = 3×1 8 7 9 ```
`Rrow = rescale(X,"InputMin",rowmin,"InputMax",rowmax)`
```Rrow = 3×3 1.0000 0 0.7143 0 0.5000 1.0000 0.2857 1.0000 0 ```

## Input Arguments

collapse all

Input array, specified as a scalar, vector, matrix, or multidimensional array.

• If `X` has type `single`, then the output also has type `single`. Otherwise, the output has type `double`.

• If `X` is constant, then `rescale` returns the lower bound of the interval (0 by default) or `NaN` (when the specified interval contains `Inf`).

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical`

Lower bound, specified as a scalar, vector, matrix, or multidimensional array. `a` must have a size that is compatible with the input array. For example, if `X` is an `M`-by-`N` matrix, then `rescale` operates along the dimension determined by the shape of `a`:

• If `a` is a scalar, then `rescale` uses it as the lower bound for all elements of `X`.

• If `a` is a 1-by-`N` row vector, then `rescale` uses each element as the lower bound for the corresponding column of `X`.

• If `a` is an `M`-by-1 column vector, then `rescale` uses each element as the lower bound for the corresponding row of `X`.

For more information on compatible array sizes, see Compatible Array Sizes for Basic Operations.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

Upper bound, specified as a scalar, vector, matrix, or multidimensional array. `b` must have a size that is compatible with the input array. For example, if `X` is an `M`-by-`N` matrix, then `rescale` operates along the dimension determined by the shape of `b`:

• If `b` is a scalar, then `rescale` uses it as the upper bound for all elements of `X`.

• If `b` is a 1-by-`N` row vector, then `rescale` uses each element as the upper bound for the corresponding column of `X`.

• If `b` is an `M`-by-1 column vector, then `rescale` uses each element as the upper bound for the corresponding row of `X`.

For more information on compatible array sizes, see Compatible Array Sizes for Basic Operations.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: ```B = rescale(A,"InputMin",5,"InputMax",10)```

Minimum of input range, specified as a scalar, vector, matrix, or multidimensional array. The default value for an input array `X` is `min(X(:))`. Specifying an input range either expands or shrinks the range of the input data. For instance, `rescale` sets all elements that are less than the specified input minimum to the value of `InputMin` before scaling.

The value of `InputMin` must have a size that is compatible with the input array. For example, if `X` is an `M`-by-`N` matrix, then `rescale` operates along the dimension dictated by the shape of the input minimum:

• If the input minimum is a scalar, then `rescale` uses that minimum value for all elements of `X`.

• If the input minimum is a 1-by-`N` row vector, then `rescale` uses each element as the minimum for the corresponding column of `X`.

• If the input minimum is an `M`-by-1 column vector, then `rescale` uses each element as the minimum for the corresponding row of `X`.

For more information on compatible array sizes, see Compatible Array Sizes for Basic Operations.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical`

Maximum of input range, specified as a scalar, vector, matrix, or multidimensional array. The default value for an input array `X` is `max(X(:))`. Specifying an input range either expands or shrinks the range of the input data. For instance, `rescale` sets all elements that are greater than the specified input maximum to the value of `InputMax` before scaling.

The value of `InputMax` must have a size that is compatible with the input array. For example, if `X` is an `M`-by-`N` matrix, then `rescale` operates along the dimension dictated by the shape of the input maximum:

• If the input maximum is a scalar, then `rescale` uses that maximum value for all elements of `X`.

• If the input maximum is a 1-by-`N` row vector, then `rescale` uses each element as the maximum for the corresponding column of `X`.

• If the input maximum is an `M`-by-1 column vector, then `rescale` uses each element as the maximum for the corresponding row of `X`.

For more information on compatible array sizes, see Compatible Array Sizes for Basic Operations.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical`

## Algorithms

`R = rescale(X,a,b,"InputMin",inmin,"InputMax",inmax)` uses the formula

`l + [(X-inmin)./(inmax-inmin)].*(b-a)`

to scale the elements of an array `X` when the values of `X` are within the bounds of `inmin` and `inmax`.

• If `a` and `b` are not specified, then `rescale` uses the default values 0 and 1, respectively.

• If `InputMin` is not specified, then `rescale` sets its value to the default `min(X(:))`.

• If `InputMax` is not specified, then `rescale` sets its value to the default `max(X(:))`.

## Version History

Introduced in R2017b