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?