Вопрос, кажется, использует «растяжение» в двух смыслах. 1) перевести значения в массиве в заданный диапазон. 2) Расширить массив до большего массива.
Версия 1. a -> от 0 до 255. Без изменения размера.
def translate(x, mx):
lo = x.min()
rng = x.max()-lo
return (x-lo)*mx/rng
a =np.array([10, 15,16,20, 25, 125, 126, 130, 150, 200, 201., 202])
at = translate(a,255.)
print(at)
# array([ 0. , 6.640625, 7.96875 , 13.28125 , 19.921875,
# 152.734375, 154.0625 , 159.375 , 185.9375 , 252.34375 ,
# 253.671875, 255. ])
Массив a остается того же размера, нозначения растягиваются, чтобы заполнить диапазон от 0 до 255.
Версия 2
x = np.arange(len(a)) # An independent x for each a (or at)
new_x = np.linspace( 0., 11., 24) # Make the result have 25 elements, from 11.
print(new_x)
# [ 0. 0.47826087 0.95652174 1.43478261 1.91304348 2.39130435
# 2.86956522 3.34782609 3.82608696 4.30434783 4.7826087 5.26086957
# 5.73913043 6.2173913 6.69565217 7.17391304 7.65217391 8.13043478
# 8.60869565 9.08695652 9.56521739 10.04347826 10.52173913 11. ]
Используйте new_x для интерполяции значений a (или at) на основе x
np.interp(new_x, x, at) # The array at is made longer (25 elements)
# array([ 0. , 3.17595109, 6.35190217, 7.21807065,
# 7.85326087, 10.04755435, 12.58831522, 15.59103261,
# 18.7669837 , 60.34307065, 123.86209239, 153.08084239,
# 153.71603261, 155.2173913 , 157.75815217, 163.99456522,
# 176.69836957, 194.59918478, 226.35869565, 252.45923913,
# 253.09442935, 253.72961957, 254.36480978, 255. ])
np.interp(new_x, x, a) # The original array a is made longer (25 elements)
# array([ 10. , 12.39130435, 14.7826087 , 15.43478261,
# 15.91304348, 17.56521739, 19.47826087, 21.73913043,
# 24.13043478, 55.43478261, 103.26086957, 125.26086957,
# 125.73913043, 126.86956522, 128.7826087 , 133.47826087,
# 143.04347826, 156.52173913, 180.43478261, 200.08695652,
# 200.56521739, 201.04347826, 201.52173913, 202. ])
Я не уверен, что любой ответ отвечает на вопрос, но это два способа, которыми я могу его интерпретировать.