Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > error using all()/numpy [TypeError: cannot perform reduce withflexible type]

Reply
Thread Tools

error using all()/numpy [TypeError: cannot perform reduce withflexible type]

 
 
Marc Oldenhof
Guest
Posts: n/a
 
      05-23-2008
Hello all,

I'm pretty new to Python, but use it a lot lately. I'm getting a crazy
error trying to do operations on a string list after importing numpy.
Minimal example:

[start Python]

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:0 [MSC v.1310 32 bit
(Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> a=['1','2','3']
>>> all(a)

True
>>> from numpy import *
>>> all(a)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
982, in all
return _wrapit(a, 'all', axis, out)
File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
37, in _wrapit
result = getattr(asarray(obj),method)(*args, **kwds)
TypeError: cannot perform reduce with flexible type

[end of example]

It seems that Python calls numpy's "all" instead of the standard one,
is that right? If so, how can I call the standard "all" after the
numpy import? ["import numpy" is not a desirable option, I use a lot
of math in my progs]

Is there another way around this error?

Marc
 
Reply With Quote
 
 
 
 
Marc Oldenhof
Guest
Posts: n/a
 
      05-23-2008
On 23 mei, 09:12, Marc Oldenhof <(E-Mail Removed)> wrote:
> Hello all,
>
> I'm pretty new to Python, but use it a lot lately. I'm getting a crazy
> error trying to do operations on a string list after importing numpy.
> Minimal example:
>
> [start Python]
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:0 [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>
> >>> a=['1','2','3']
> >>> all(a)

> True
> >>> from numpy import *
> >>> all(a)

>
> Traceback (most recent call last):
> * File "<stdin>", line 1, in <module>
> * File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 982, in all
> * * return _wrapit(a, 'all', axis, out)
> * File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 37, in _wrapit
> * * result = getattr(asarray(obj),method)(*args, **kwds)
> TypeError: cannot perform reduce with flexible type
>
> [end of example]
>
> It seems that Python calls numpy's "all" instead of the standard one,
> is that right? If so, how can I call the standard "all" after the
> numpy import? ["import numpy" is not a desirable option, I use a lot
> of math in my progs]
>
> Is there another way around this error?
>
> Marc


Never mind, I found a way. For reference:

>>> import __builtin__
>>> __builtin__.all(a)

True

Works!

Marc
 
Reply With Quote
 
 
 
 
Gary Herron
Guest
Posts: n/a
 
      05-23-2008
Marc Oldenhof wrote:
> Hello all,
>
> I'm pretty new to Python, but use it a lot lately. I'm getting a crazy
> error trying to do operations on a string list after importing numpy.
> Minimal example:
>
> [start Python]
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:0 [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>
>
>>>> a=['1','2','3']
>>>> all(a)
>>>>

> True
>
>>>> from numpy import *
>>>> all(a)
>>>>

> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 982, in all
> return _wrapit(a, 'all', axis, out)
> File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 37, in _wrapit
> result = getattr(asarray(obj),method)(*args, **kwds)
> TypeError: cannot perform reduce with flexible type
>
> [end of example]
>
> It seems that Python calls numpy's "all" instead of the standard one,
> is that right? If so, how can I call the standard "all" after the
> numpy import? ["import numpy" is not a desirable option, I use a lot
> of math in my progs]
>
> Is there another way around this error?
>


Yes, there are several solutions, but before that I'll say that "from
.... import *" is frowned upon for just this reason. You have no
control (and often no idea) what * ends up importing, and if any of
those names overwrite an existing name (as you've found here), you may
not notice. (It's not quite fair to say "Python calls numpy's "all".
*You* call it after you chose to replace Python's "all" with numpy's "all".)

Solutions:



Save Python's "all" first under another name:
original_all = all
from numpy import all
Now you can call all(...) or original_all(...).



The built-in (as they are called) are always available through __builtins__:
from numpy import *
all(...) # is numpy's all
__builtins__.all(...) # Is the original all




Don't import *, but rather import only those things you need.
from numpy import array, dot, float32, int32, ...
and if you need numpy's all
from numpy import all as numpy_all


Gary Herron




> Marc
> --
> http://mail.python.org/mailman/listinfo/python-list
>


 
Reply With Quote
 
Peter Otten
Guest
Posts: n/a
 
      05-23-2008
Marc Oldenhof wrote:

> I'm pretty new to Python, but use it a lot lately. I'm getting a crazy
> error trying to do operations on a string list after importing numpy.
> Minimal example:
>
> [start Python]
>
> Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:0 [MSC v.1310 32 bit
> (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
>
>>>> a=['1','2','3']
>>>> all(a)

> True
>>>> from numpy import *
>>>> all(a)

> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 982, in all
> return _wrapit(a, 'all', axis, out)
> File "C:\Python25\lib\site-packages\numpy\core\fromnumeric.py", line
> 37, in _wrapit
> result = getattr(asarray(obj),method)(*args, **kwds)
> TypeError: cannot perform reduce with flexible type
>
> [end of example]
>
> It seems that Python calls numpy's "all" instead of the standard one,
> is that right? If so, how can I call the standard "all" after the
> numpy import? ["import numpy" is not a desirable option, I use a lot
> of math in my progs]
>
> Is there another way around this error?


That's not an error; star-import is a rebinding operation, just like
assignments and the def statement.

>>> from numpy import *
>>> del all, sum, any
>>> all("123")

True

Peter
 
Reply With Quote
 
I V
Guest
Posts: n/a
 
      05-23-2008
On Fri, 23 May 2008 00:12:35 -0700, Marc Oldenhof wrote:
> It seems that Python calls numpy's "all" instead of the standard one, is
> that right? If so, how can I call the standard "all" after the numpy
> import? ["import numpy" is not a desirable option, I use a lot of math
> in my progs]


I think the ideal solution is to try and persuade yourself that typing
"numpy." in front of some functions now and then is not that big a price
to pay to avoid name collisions; using an editor with code completion
would probably help in that task.

You could also try:

import numpy as n

which reduces the typing a bit and limits you to one possible name
collision, or

from numpy import array, gradient #and whatever else you need

or

import numpy

array = numpy.array
gradient = numpy.gradient # Then you can access the names you use a lot
# directly, while accessing stuff you use less
# frequently via numpy.whatever

in which case you'll know exactly which names you're overwriting. Peter's
solution, of explicitly deleting some names that you've imported, strikes
me as less good, because you might find the same problem recurs later, if
the numpy developers add new names to the module.
 
Reply With Quote
 
Marc Oldenhof
Guest
Posts: n/a
 
      05-23-2008
On 23 mei, 09:12, Marc Oldenhof <(E-Mail Removed)> wrote:
<snip my post>

Thanks for the reactions, I'll use the "from numpy import <individual
stuff>" from now on

Marc
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: error: cannot invoke setopt() - perform() is currently running alex goretoy Python 0 01-15-2009 07:38 AM
error: cannot invoke setopt() - perform() is currently running alex goretoy Python 0 01-15-2009 07:20 AM
gcc "ld: cannot perform PE operations on non PE output file" Remi.Arntzen@gmail.com C++ 2 11-14-2006 06:14 AM
Cannot perform the scandisk Ch. Rajinder Nijjhar Jatt Computer Support 5 07-21-2005 01:30 AM
better to compress the jpeg or reduce resolution or reduce pixel size? Mr.Will Digital Photography 8 10-08-2004 03:16 PM



Advertisments