doucmentation bug or bug? p or q for numerical arrays

A

Alan G Isaac

from Numeric import *
p = array([1, 1, 0, 0])
q = array([1, 0, 1, 0])
print logical_or(p,q) #expected result
print (p or q) #prints p

This might be expected, except for the documentation:
http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm#pgfId-36127

"Universal Functions, or ufunc s. The operators which invoke them when
applied to arrays are indicated in parentheses."

And then numarray has the same documentation (in the manual)
but chokes altogether on the use of 'or'.

There is a like problem with 'and'.

Am I misreading something?
Are there actually operators for these functions?

Thanks,
Alan Isaac

PS A comment: operators are really useful here. Using the ufuncs
makes for very messy code. See the GAUSS programming
language for a nice syntax.
 
P

Peter Otten

Alan said:
from Numeric import *
p = array([1, 1, 0, 0])
q = array([1, 0, 1, 0])
print logical_or(p,q) #expected result
print (p or q) #prints p

This might be expected, except for the documentation:
http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm#pgfId-36127

"Universal Functions, or ufunc s. The operators which invoke them when
applied to arrays are indicated in parentheses."

And then numarray has the same documentation (in the manual)
but chokes altogether on the use of 'or'.

There is a like problem with 'and'.

Am I misreading something?
Are there actually operators for these functions?

Unlike '&', '|' and '~', the logical operators 'and' and 'or' cannot be
overridden, 'not' not in a useful manner (__nonzero__() must return an
integer). The documentation is probably wrong.

Peter
 
C

Colin J. Williams

Peter said:
Alan G Isaac wrote:

from Numeric import *
p = array([1, 1, 0, 0])
q = array([1, 0, 1, 0])
print logical_or(p,q) #expected result
print (p or q) #prints p

This might be expected, except for the documentation:
http://numpy.sourceforge.net/numdoc/HTML/numdoc.htm#pgfId-36127

"Universal Functions, or ufunc s. The operators which invoke them when
applied to arrays are indicated in parentheses."

And then numarray has the same documentation (in the manual)
but chokes altogether on the use of 'or'.

There is a like problem with 'and'.

Am I misreading something?
Are there actually operators for these functions?


Unlike '&', '|' and '~', the logical operators 'and' and 'or' cannot be
overridden, 'not' not in a useful manner (__nonzero__() must return an
integer). The documentation is probably wrong.

Peter
The not yet released version of PyMatrix, which subsclasses NumArray,
behaves as follows:

import PyMatrix.matrix as _m
p = _m.M([1, 1, 0, 0], type= _m._nt.Bool)
q = _m.M([1, 0, 1, 0], type= _m._nt.Bool)
print p ^ q # -> [[F T T F]]
print p & q # -> [[T F F F]]
print p | q # -> [[T T T F]]

Colin W.
 
T

Terry Reedy

Peter Otten said:
Unlike '&', '|' and '~', the logical operators 'and' and 'or' cannot be
overridden,

Which is because they are not actually operators in the strict sense (in
which 'a op b' is short for 'opfunc(a,b)'). Because of their
'short-circuiting' behavior, they are 'special forms' (in the Lisp sense)
that may not calculate b, whereas a function call always would. The
so-called ternary op is also special and also can not be directly written
as a function for the same reason.

Terry J. Reedy
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,050
Latest member
AngelS122

Latest Threads

Top