Reputation: 16329
What is the difference between the built in float
and numpy.float32
?
Example
a = 58682.7578125
print type(a)
print a
print type(numpy.float32(a))
print numpy.float32(a)
Output:
<type 'float'>
58682.7578125
<type 'numpy.float32'>
58682.8
I've found here that numpy.float32
is:
float32 Single precision float: sign bit, 8 bits exponent, 23 bits mantissa
didn't find what the built in float
format is.
Upvotes: 57
Views: 146088
Reputation: 952
Data type-wise numpy floats and built-in Python floats are the same, however boolean operations on numpy floats return np.bool_
objects, which always return False
for val is True
. Example below:
In [1]: import numpy as np
...: an_np_float = np.float32(0.3)
...: a_normal_float = 0.3
...: print(a_normal_float, an_np_float)
...: print(type(a_normal_float), type(an_np_float))
0.3 0.3
<class 'float'> <class 'numpy.float32'>
Numpy floats can arise from scalar output of array operations. If you weren't checking the data type, it is easy to confuse numpy floats for native floats.
In [2]: criterion_fn = lambda x: x <= 0.5
...: criterion_fn(a_normal_float), criterion_fn(an_np_float)
Out[2]: (True, True)
Even boolean operations look correct. However the result of the numpy float isn't a native boolean datatype, and thus can't be truthy.
In [3]: criterion_fn(a_normal_float) is True, criterion_fn(an_np_float) is True
Out[3]: (True, False)
In [4]: type(criterion_fn(a_normal_float)), type(criterion_fn(an_np_float))
Out[4]: (bool, numpy.bool_)
According to this github thread, criterion_fn(an_np_float) == True
will evaluate properly, but that goes against the PEP8 style guide.
Instead, extract the native float from the result of numpy operations. You can do an_np_float.item()
to do it explicitly (ref: this SO post) or simply pass values through float()
.
Upvotes: 2
Reputation: 249123
Python's standard float
type is a C double
: http://docs.python.org/2/library/stdtypes.html#typesnumeric
NumPy's standard numpy.float
is the same, and is also the same as numpy.float64
.
Upvotes: 62