How to bin the values of a pytorch tensor to the nearest maximum and minimum from an array

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?