Sky
Sky

Reputation: 4853

Remapping an array of integers

I have an array of integers from [0 .. 255].

I'd like to modify the array so that there are still 256 numbers, but the numbers start from 100 and move up to 255. This means that many integers will be repeating (i.e. [100,100,101,101,102 ...])

Any ideas as to how I can do this? Sorry, I know this is probably a simple problem, but it's really boggling my mind right now...

Thanks!

Note: a solution provided in python, pseudo-code, or javascript would be nice. =)

Upvotes: 0

Views: 2346

Answers (3)

icyrock.com
icyrock.com

Reputation: 28608

Here's one way:

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

gives:

[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, 127, 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, 220, 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]

Upvotes: 0

Ned Batchelder
Ned Batchelder

Reputation: 375634

If you know exactly the numbers you want, why do you need to modify an existing array, why not just make the array you want? Actual Python:

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

Upvotes: 3

Russell Borogove
Russell Borogove

Reputation: 19037

Python:

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

Sanity check:

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

This is linear interpolation. The multiply and divide essentially convert the index range into a linear ramp from 0.0 to 1.0. This is applied as a scale to the desired range width of values, and added to the minimum value.

Upvotes: 1

Related Questions