What is the significance of the underscore suffixing in int_, float_, etc.?
If you're unsure if your variable is scalar, list, or array, using the ones with "_" will ensure your code will work regardless (if that's the behavior you intended). See the example code below.
import numpy as np
scalar = 3
L1 = [3]
L2 = [1, 2, 3]
np.float(scalar) # okay
np.float(L1) # breaks (TypeError)
np.float(L2) # breaks (TypeError)
np.float_(scalar) # okay
np.float_(L1) # okay
np.float_(L2) # okay
From page 21 of Guide to Numpy by TE Oliphant:
Names for the data types that would clash with standard Python object names are followed by a trailing underscore, ’ ’. These data types are so named because they use the same underlying precision as the corresponding Python data types.
. . .
The array types
bool_,int_,complex_,float_,object_,unicode_, andstr_are enhanced-scalars. They are very similar to the standard Python types (without the trailing underscore) and inherit from them (except forbool_andobject_). They can be used in place of the standard Python types whenever desired. Whenever a data type is required, as an argument, the standard Python types are recognized as well.