I'm new to NumPy and SciPy. Unlike Matlab, it seems like there is a data type associated with each array in NumPy.
Suppose that we have an integer array x
:
import numpy as np
x = np.array([1, 2, 3])
If I want to convert the array into float, then it seems like the following works:
y1 = x.astype('float64') # Works!
y2 = x.astype('float_') # Works!
y3 = x.astype('float') # Works!
But I'm somewhat puzzled to see the following also works without the single quotation marks.
y4 = x.astype(float) # Still works!!
But for other expressions used for y1 and y2, if I omit the single quotation mark, it doesn't work:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
So, I'm somewhat confused about why y4 works, but y5 and y6 cause an error. Could someone enlighten me on this?
The other expressions work, you just need to import the types from numpy. You don't need to do this for float
because it is a built-in type for Python.
y5 = x.astype(np.float64)
y6 = x.astype(np.float_)
Both the string-type and type-type inputs are converted to a numpy.dtype
object internally, which is what you see when using the ndarray.dtype
attribute.
These 2 don't work because there isn't, in your workspace, variables with those names:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
I get a NameError: name 'float64' is not defined
. The error is produced by the Python interpreter, before anything is passed to the x.astype
method.
You'd get the same error if you just typed float64
in the interactive interpreter.
np.float64
does work because there is such a variable in the np
namespace. It is actually a numpy class.
float
also works. It too is a class, a base Python one (it can also be used as a function, converting a string or number to a float object).
'float64' is a string, that astype
understands, probably by looking up something in a table. (I could look that up).
On the other hand if I give astype
something random string I get a different error
In [967]: A.astype('bar')
...
TypeError: data type "bar" not understood
np.dtype('bar')
gives the same error.
np.dtype(float)
np.dtype('float64')
np.dtype('float')
all return the same dtype('float64')
object.
reading the documentation of astype
:
dtype : str or dtype
Typecode or data-type to which the array is cast.
When you're using float
without quotes, then you're using dtype.
When you're using "float"
, then you're using str.
float64
and float_
aren't dtypes in python.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With