Home > Blockchain >  convert an array of integers to an array of floats
convert an array of integers to an array of floats

Time:08-25

Given any integer n convert it to a float 0.n

#input
[11 22 5 1 68 17 5 4 558]
#output
[0.11  0.22  0.5   0.1   0.68  0.17  0.5   0.4   0.558]

Is there a way in numpy to do the following.

import numpy as np

int_=np.array([11,22,5,1,68,17,5,4,558])

float_=np.array([])
for i in range(len(int_)):
    float_=np.append(float_,int_[i]/10**(len(str(int_[i]))))
print(float_)
[0.11  0.22  0.5   0.1   0.68  0.17  0.5   0.4   0.558]

for now the code I have is slow (takes a lot of time for very large arrays)

CodePudding user response:

One way using numpy.log10:

arr = np.array([11,22,5,1,68,17,5,4,558])
new_arr = arr/np.power(10, np.log10(arr).astype(int)   1)
print(new_arr)

Output:

[0.11  0.22  0.5   0.1   0.68  0.17  0.5   0.4   0.558]

Explain:

  • numpy.log10(arr).astype(int) 1 will give you the number of digits
  • numpy.power(10, {above}) will give you the required denominator

CodePudding user response:

You can also try a Vectorize version of your code

def chg_to_float(val):
  return val/10**len(str(val))

v_chg_to_float = np.vectorize(chg_to_float)

np.array(list(map(chg_to_float, ar)))

CodePudding user response:

Since you're only inserting a 0. in front of each input integer, you can simply cast them to strings, add the 0., and then cast them to floats.

>>> input_list = [11, 22, 5, 1, 68, 17, 5, 4, 558]
>>> [float(f'0.{str(item)}') for item in input_list]
[0.11, 0.22, 0.5, 0.1, 0.68, 0.17, 0.5, 0.4, 0.558]

Performance could be enhanced by using a generator comprehension instead of a list comprehension.

  • Related