Say I have an array of values `w = [w1, w2, w3, ...., wn]`

and this array is sorted in ascending order, all values being equally spaced.

I have a pytorch tensor of any arbitrary shape. For the sake of this example, lets say that tensor is:

```
import torch
a = torch.rand(2,4)
```

assuming `w1=torch.min(a)`

and `wn=torch.max(a)`

, I want to create two separate tensors, `amax`

and `amin`

, both of shape `(2,4)`

such that `amax`

contains values from `w`

that are the nearest maximum value to the elements of `a`

, and vice-versa for `amin`

.

As an example, say:

```
a = tensor([[0.7192, 0.6264, 0.5180, 0.8836],
[0.1067, 0.1216, 0.6250, 0.7356]])
w = [0.0, 0.33, 0.66, 1]
```

therefore, I would like `amax`

and `amin`

to be,

```
amax = tensor([[1.000, 0.66, 0.66, 1.000],
[0.33, 0.33, 0.66, 1.00]])
amin = tensor([[0.66, 0.33, 0.33, 0.66],
[0.00, 0.00, 0.33, 0.66]])
```

What is the fastest way to do this?