这个问题似乎在两种意义上使用了“伸展”。
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 根据 x 插入 a(或 at)值
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. ])
我不确定任一答案是否符合问题,但这是我可以解释的两种方式。