Convert list or numpy array of single element to float in python
Just access the first item of the list/array, using the index access and the index 0:
>>> list_ = [4]>>> list_[0]4>>> array_ = np.array([4])>>> array_[0]4
This will be an int
since that was what you inserted in the first place. If you need it to be a float for some reason, you can call float()
on it then:
>>> float(list_[0])4.0
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to (the now deprecated) np.asscalar(a)
. This has the benefit of working in situations with views and superfluous axes, while the above solutions will currently break. For example,
>>> a = np.asarray(1).view()>>> a.item() # correct1>>> a[0] # breaksTraceback (most recent call last): File "<stdin>", line 1, in <module>IndexError: too many indices for array>>> a = np.asarray([[2]])>>> a.item() # correct2>>> a[0] # bad resultarray([2])
This also has the benefit of throwing an exception if the array is not actually a scalar, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])>>> a[0] # silently proceeds1>>> a.item() # detects incorrect sizeTraceback (most recent call last): File "<stdin>", line 1, in <module>ValueError: can only convert an array of size 1 to a Python scalar
Use numpy.asscalar to convert a numpy array / matrix a scalar value:
>>> a=numpy.array([[[[42]]]])>>> numpy.asscalar(a)42
The output data type is the same type returned by the input’s
item
method.
It has built in error-checking if there is more than an single element:
>>> a=numpy.array([1, 2])>>> numpy.asscalar(a)
gives:
ValueError: can only convert an array of size 1 to a Python scalar
Note: the object passed to asscalar
must respond to item
, so passing a list or tuple won't work.