重新映射整数数组

时间:2012-02-18 01:01:39

标签: python arrays function math

我有一个来自[0 .. 255]的整数数组。

我想修改数组,以便仍然有256个数字,但数字从100开始并向上移动到255.这意味着许多整数将重复(即[100,100,101,101,102 ...])

关于我如何做到这一点的任何想法?对不起,我知道这可能是一个简单的问题,但现在真的令人难以置信......

谢谢!

注意:python,伪代码或javascript中提供的解决方案会很好。 =)

3 个答案:

答案 0 :(得分:3)

如果你确切知道你想要的数字,你为什么需要修改现有的数组,为什么不只是制作你想要的数组呢?实际的Python:

nums = [int(i*156.0/256+100) for i in range(256)]

答案 1 :(得分:2)

的Python:

RANGE_SIZE = 255-100
for index in range(256):
     array[index] = 100 + int( RANGE_SIZE * float(index) / 255.0 )

完整性检查:

  • 当index = 0时,array [index] = 100 + 0 = 100
  • 当index = 255时,array [index] = 100 +(255-100)= 255

这是线性插值。乘法和除法基本上将索引范围转换为从0.0到1.0的线性斜坡。这将作为比例应用于所需的值范围宽度,并添加到最小值。

答案 2 :(得分:0)

这是一种方式:

n = 256
nf = float(n - 1)
xs = range(n)
(min, max) = (100, 255)
[min + int(i / nf * (max - min)) for i in xs]

给出:

[100,100,101,101,102,103,103,104,104,105,106,106,107,107,108,109,109,110,110,111,112,112,113, 113,114,115,115,116,117,117,118,118,119,120,120,121,121,122,123,123,124,124,125,126,126,127,123,128, 129,129,130​​,131,131,132,132,133,134,134,135,135,136,137,137,138,138,139,140,​​140,​​141,141,142,143,143, 144,144,145,146,146,147,148,148,149,149,150,151,151,152,152,153,154,154,155,155,156,157,157,158,158, 159,160,160,161,162,162,163,163,164,165,165,166,166,167,168,168,169,169,170,171,171,172,172,173,174, 174,175,175,176,177,177,178,179,179,180,180,181,182,182,183,183,184,185,185,186,186,187,188,188,189, 189,190,191,191,192,193,193,194,194,195,196,196,197,197,198,199,199,200,200,201,202,202,203,203,204, 205,205,206,206,207,208,208,209,210,210,211,211,212,213,213,214,214,215,216,216,217,217,218,219,219, 220,2 20,221,222,222,223,224,224,225,225,226,227,227,228,228,229,230,230,231,231,232,233,233,234,234,235, 236,236,237,237,238,239,239,240,241,241,242,242,243,244,244,245,245,246,247,247,248,248,249,250,250, 251,251,252,253,253,254,255]