Convert list or numpy array of single element to float in python
I have a function which can accept either a list or a numpy array.
In either case, the list/array has a single element (always). I just need to return a float.
So, e.g., I could receive:
list_ = [4]
or the numpy array:
array_ = array([4])
And I should return
4.0
So, naturally (I would say), I employ float(...) on list_ and get:
TypeError: float() argument must be a string or a number
I do the same to array_ and this time it works by responding with "4.0". From this, I learn that Python's list cannot be converted to float this way.
Based on the success with the numpy array conversion to float this lead me to the approach:
float(np.asarray(list_))
And this works when list_ is both a Python list and when it is a numpy array.
Question
But it seems like this approach has an overhead first converting the list to a numpy array and then to float. Basically: Is there a better way of doing this?
python arrays list numpy floating-point
add a comment |
I have a function which can accept either a list or a numpy array.
In either case, the list/array has a single element (always). I just need to return a float.
So, e.g., I could receive:
list_ = [4]
or the numpy array:
array_ = array([4])
And I should return
4.0
So, naturally (I would say), I employ float(...) on list_ and get:
TypeError: float() argument must be a string or a number
I do the same to array_ and this time it works by responding with "4.0". From this, I learn that Python's list cannot be converted to float this way.
Based on the success with the numpy array conversion to float this lead me to the approach:
float(np.asarray(list_))
And this works when list_ is both a Python list and when it is a numpy array.
Question
But it seems like this approach has an overhead first converting the list to a numpy array and then to float. Basically: Is there a better way of doing this?
python arrays list numpy floating-point
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
1
eitherfloat(list_[0])
orfloat(''.join(list_))
– farhawa
May 18 '15 at 19:21
add a comment |
I have a function which can accept either a list or a numpy array.
In either case, the list/array has a single element (always). I just need to return a float.
So, e.g., I could receive:
list_ = [4]
or the numpy array:
array_ = array([4])
And I should return
4.0
So, naturally (I would say), I employ float(...) on list_ and get:
TypeError: float() argument must be a string or a number
I do the same to array_ and this time it works by responding with "4.0". From this, I learn that Python's list cannot be converted to float this way.
Based on the success with the numpy array conversion to float this lead me to the approach:
float(np.asarray(list_))
And this works when list_ is both a Python list and when it is a numpy array.
Question
But it seems like this approach has an overhead first converting the list to a numpy array and then to float. Basically: Is there a better way of doing this?
python arrays list numpy floating-point
I have a function which can accept either a list or a numpy array.
In either case, the list/array has a single element (always). I just need to return a float.
So, e.g., I could receive:
list_ = [4]
or the numpy array:
array_ = array([4])
And I should return
4.0
So, naturally (I would say), I employ float(...) on list_ and get:
TypeError: float() argument must be a string or a number
I do the same to array_ and this time it works by responding with "4.0". From this, I learn that Python's list cannot be converted to float this way.
Based on the success with the numpy array conversion to float this lead me to the approach:
float(np.asarray(list_))
And this works when list_ is both a Python list and when it is a numpy array.
Question
But it seems like this approach has an overhead first converting the list to a numpy array and then to float. Basically: Is there a better way of doing this?
python arrays list numpy floating-point
python arrays list numpy floating-point
asked May 18 '15 at 19:16
denvardenvar
1,51761838
1,51761838
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
1
eitherfloat(list_[0])
orfloat(''.join(list_))
– farhawa
May 18 '15 at 19:21
add a comment |
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
1
eitherfloat(list_[0])
orfloat(''.join(list_))
– farhawa
May 18 '15 at 19:21
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
1
1
either
float(list_[0])
or float(''.join(list_))
– farhawa
May 18 '15 at 19:21
either
float(list_[0])
or float(''.join(list_))
– farhawa
May 18 '15 at 19:21
add a comment |
4 Answers
4
active
oldest
votes
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
add a comment |
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to 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() # correct
1
>>> a[0] # breaks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> a = np.asarray([[2]])
>>> a.item() # correct
2
>>> a[0] # bad result
array([2])
This also has the benefit of throwing an exception if the array is not a singleton, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])
>>> a[0] # silently proceeds
1
>>> a.item() # detects incorrect size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: can only convert an array of size 1 to a Python scalar
add a comment |
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.
add a comment |
I would simply use,
np.asarray(input, dtype=np.float)[0]
- If
input
is anndarray
of the right dtype, there is no overhead, sincenp.asarray
does nothing in this case. - if
input
is alist
,np.asarray
makes sure the output is of the right type.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f30311172%2fconvert-list-or-numpy-array-of-single-element-to-float-in-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
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
add a comment |
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
add a comment |
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
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
answered May 18 '15 at 19:18
pokepoke
210k46329387
210k46329387
add a comment |
add a comment |
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to 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() # correct
1
>>> a[0] # breaks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> a = np.asarray([[2]])
>>> a.item() # correct
2
>>> a[0] # bad result
array([2])
This also has the benefit of throwing an exception if the array is not a singleton, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])
>>> a[0] # silently proceeds
1
>>> a.item() # detects incorrect size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: can only convert an array of size 1 to a Python scalar
add a comment |
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to 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() # correct
1
>>> a[0] # breaks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> a = np.asarray([[2]])
>>> a.item() # correct
2
>>> a[0] # bad result
array([2])
This also has the benefit of throwing an exception if the array is not a singleton, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])
>>> a[0] # silently proceeds
1
>>> a.item() # detects incorrect size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: can only convert an array of size 1 to a Python scalar
add a comment |
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to 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() # correct
1
>>> a[0] # breaks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> a = np.asarray([[2]])
>>> a.item() # correct
2
>>> a[0] # bad result
array([2])
This also has the benefit of throwing an exception if the array is not a singleton, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])
>>> a[0] # silently proceeds
1
>>> a.item() # detects incorrect size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: can only convert an array of size 1 to a Python scalar
You may want to use the ndarray.item
method, as in a.item()
. This is also equivalent to 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() # correct
1
>>> a[0] # breaks
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: too many indices for array
>>> a = np.asarray([[2]])
>>> a.item() # correct
2
>>> a[0] # bad result
array([2])
This also has the benefit of throwing an exception if the array is not a singleton, while the a[0]
approach will silently proceed (which may lead to bugs sneaking through undetected).
>>> a = np.asarray([1, 2])
>>> a[0] # silently proceeds
1
>>> a.item() # detects incorrect size
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: can only convert an array of size 1 to a Python scalar
edited Nov 13 '18 at 0:47
answered Apr 26 '17 at 17:53
Aaron VoelkerAaron Voelker
301310
301310
add a comment |
add a comment |
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.
add a comment |
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.
add a comment |
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.
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.
answered Mar 14 '18 at 8:07
Tom HaleTom Hale
6,8714258
6,8714258
add a comment |
add a comment |
I would simply use,
np.asarray(input, dtype=np.float)[0]
- If
input
is anndarray
of the right dtype, there is no overhead, sincenp.asarray
does nothing in this case. - if
input
is alist
,np.asarray
makes sure the output is of the right type.
add a comment |
I would simply use,
np.asarray(input, dtype=np.float)[0]
- If
input
is anndarray
of the right dtype, there is no overhead, sincenp.asarray
does nothing in this case. - if
input
is alist
,np.asarray
makes sure the output is of the right type.
add a comment |
I would simply use,
np.asarray(input, dtype=np.float)[0]
- If
input
is anndarray
of the right dtype, there is no overhead, sincenp.asarray
does nothing in this case. - if
input
is alist
,np.asarray
makes sure the output is of the right type.
I would simply use,
np.asarray(input, dtype=np.float)[0]
- If
input
is anndarray
of the right dtype, there is no overhead, sincenp.asarray
does nothing in this case. - if
input
is alist
,np.asarray
makes sure the output is of the right type.
answered May 18 '15 at 19:22
rthrth
5,74422456
5,74422456
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f30311172%2fconvert-list-or-numpy-array-of-single-element-to-float-in-python%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Can't you use slicing: float(list_[0]) = 4.0
– Kyrubas
May 18 '15 at 19:17
1
either
float(list_[0])
orfloat(''.join(list_))
– farhawa
May 18 '15 at 19:21