Hi,
I ran the following code:
args = np.array([4,8]) print np.sum( (arg > 0) for arg in args) print np.sum([(arg > 0) for arg in args]) print np.prod( (arg > 0) for arg in args) print np.prod([(arg > 0) for arg in args])
with this result:
2 1 <generator object <genexpr> at 0x1c70410> 1
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
BTW: the last line does what I need: the product over the truth values of all elements of args. Is there perhaps a nicer (conciser) way to achieve this? Thanks.
Nicky
On Sat, Sep 8, 2012 at 4:56 PM, nicky van foreest vanforeest@gmail.comwrote:
Hi,
I ran the following code:
args = np.array([4,8]) print np.sum( (arg > 0) for arg in args) print np.sum([(arg > 0) for arg in args]) print np.prod( (arg > 0) for arg in args) print np.prod([(arg > 0) for arg in args])
with this result:
2 1
I get 2 here, not 1 (numpy version 1.6.1).
<generator object <genexpr> at 0x1c70410> 1
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
Whatever the correct result may be, I would expect them to have the same behavior with respect to a generator argument.
BTW: the last line does what I need: the product over the truth values of all elements of args. Is there perhaps a nicer (conciser) way to achieve this? Thanks.
How about:
In [15]: np.all(args > 0) Out[15]: True
Warren
Nicky _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
Hi,
On Sun, Sep 9, 2012 at 12:56 AM, nicky van foreest vanforeest@gmail.comwrote:
Hi,
I ran the following code:
args = np.array([4,8]) print np.sum( (arg > 0) for arg in args) print np.sum([(arg > 0) for arg in args]) print np.prod( (arg > 0) for arg in args) print np.prod([(arg > 0) for arg in args])
Can't see why someone would write code like above, but anyway: In []: args = np.array([4,8]) In []: print np.sum( (arg > 0) for arg in args) 2 In []: print np.sum([(arg > 0) for arg in args]) 2 In []: print np.prod( (arg > 0) for arg in args) <generator object <genexpr> at 0x062BDA08> In []: print np.prod([(arg > 0) for arg in args]) 1 In []: print np.prod( (arg > 0) for arg in args).next() True In []: sys.version Out[]: '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]' In []: np.version.version Out[]: '1.6.0'
My 2 cents, eat
with this result:
2 1 <generator object <genexpr> at 0x1c70410> 1
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
BTW: the last line does what I need: the product over the truth values of all elements of args. Is there perhaps a nicer (conciser) way to achieve this? Thanks.
Nicky _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
On 9 September 2012 00:10, Warren Weckesser warren.weckesser@enthought.com wrote:
On Sat, Sep 8, 2012 at 4:56 PM, nicky van foreest vanforeest@gmail.com wrote:
Hi,
I ran the following code:
args = np.array([4,8]) print np.sum( (arg > 0) for arg in args) print np.sum([(arg > 0) for arg in args]) print np.prod( (arg > 0) for arg in args) print np.prod([(arg > 0) for arg in args])
with this result:
2 1
I get 2 here, not 1 (numpy version 1.6.1).
Sorry. Typo.
<generator object <genexpr> at 0x1c70410> 1
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
Whatever the correct result may be, I would expect them to have the same behavior with respect to a generator argument.
BTW: the last line does what I need: the product over the truth values of all elements of args. Is there perhaps a nicer (conciser) way to achieve this? Thanks.
How about:
In [15]: np.all(args > 0) Out[15]: True
Warren
Nicky
NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
Thanks for your hints.
NIcky
On 9 September 2012 00:30, eat e.antero.tammi@gmail.com wrote:
Hi,
On Sun, Sep 9, 2012 at 12:56 AM, nicky van foreest vanforeest@gmail.com wrote:
Hi,
I ran the following code:
args = np.array([4,8]) print np.sum( (arg > 0) for arg in args) print np.sum([(arg > 0) for arg in args]) print np.prod( (arg > 0) for arg in args) print np.prod([(arg > 0) for arg in args])
Can't see why someone would write code like above, but anyway: In []: args = np.array([4,8]) In []: print np.sum( (arg > 0) for arg in args) 2 In []: print np.sum([(arg > 0) for arg in args]) 2 In []: print np.prod( (arg > 0) for arg in args) <generator object <genexpr> at 0x062BDA08> In []: print np.prod([(arg > 0) for arg in args]) 1 In []: print np.prod( (arg > 0) for arg in args).next() True In []: sys.version Out[]: '2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]' In []: np.version.version Out[]: '1.6.0'
My 2 cents, eat
with this result:
2 1 <generator object <genexpr> at 0x1c70410> 1
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
BTW: the last line does what I need: the product over the truth values of all elements of args. Is there perhaps a nicer (conciser) way to achieve this? Thanks.
Nicky _______________________________________________ NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
NumPyDiscussion mailing list NumPyDiscussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpydiscussion
Is the difference between prod and sum intentional? I would expect that numpy.prod would also work on a generator, just like numpy.sum.
Whatever the correct result may be, I would expect them to have the same behavior with respect to a generator argument.
I found out that np.sum() has some special treatment in fromnumeric.py, where in case of a generator argument it uses the Python sum() function instead of the NumPy one. This is not the case for np.prod(), where the generator argument stays NPY_OBJECT in PyArray_GetArrayParamsFromObject. There is no NumPy code for handling generators, except for np.fromiter(), but that needs a dtype (which cannot be inferred automatically before running the generator). It might be more consistent to add special generator cases to other NumPy functions as well, using Python reduce() or imap(), but I'm not sure about the best way to solve this..
participants (4)

eat

Han Genuit

nicky van foreest

Warren Weckesser