Home > Blockchain >  Numpy adds extra decimals on conversion
Numpy adds extra decimals on conversion

Time:02-17

I noticed when converting from numpy array to list that python adds extra decimals. For example here I have some bytes that I convert to a numpy array with float32 elements:

import numpy as np

b = bytes([174, 153, 92, 59])
a = np.frombuffer(b, dtype=np.float32)
print(a[0])
print(a.tolist()[0])

Output:

0.0033660936
0.0033660936169326305

On the conversion with a.tolist() it adds extra decimals.

What is happening here? Do I loose some precision, or where is python finding these extra decimals?

CodePudding user response:

with .tolist you change the datatype from float32 to float. Check:

import numpy as np

b = bytes([174, 153, 92, 59])
a = np.frombuffer(b, dtype=np.float32)
a = np.array(a, dtype=np.float)
print(a[0])
print(a.tolist()[0])

CodePudding user response:

try print out their type

print(type(a[0])) # numpy.float32
print(type(a.tolist()[0])) # float

when you call tolist(), it changes numpy scalars to Python scalars. Python default float is float64, which is the same as numpy.float64. That's why the second one shows extra decimals. If you try a = np.frombuffer(b, dtype=np.float64), and then call tolist(), two values should be the same.

  • Related