Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #49376

Re: ? get negative from prod(x) when x is positive integers

References <CALyJZZUcfwJGbn_UqCmsUUcv9MaimyD+vjjW+d64wVc0G0f92A@mail.gmail.com>
From Joshua Landau <joshua.landau.ws@gmail.com>
Date 2013-06-28 16:04 +0100
Subject Re: ? get negative from prod(x) when x is positive integers
Newsgroups comp.lang.python
Message-ID <mailman.3960.1372431911.3114.python-list@python.org> (permalink)

Show all headers | View raw


On 28 June 2013 15:38, Vincent Davis <vincent@vincentdavis.net> wrote:
> I have a list of a list of integers. The lists are long so i cant really
> show an actual example of on of the lists, but I know that they contain only
> the integers 1,2,3,4. so for example.
> s2 = [[1,2,2,3,2,1,4,4],[2,4,3,2,3,1]]
>
> I am calculating the product, sum, max, min.... of each list in s2 but I get
> negative or 0 for the product for a lot of the lists. (I am doing this in
> ipython)
>
> for x in s2:
>     print('len = ', len(x), 'sum = ', sum(x), 'prod = ', prod(x), 'max = ',
> max(x), 'min = ', min(x))
>
> ...
>
> ('len = ', 100, 'sum = ', 247, 'prod = ', 0, 'max = ', 4, 'min = ', 1)
> ('len = ', 100, 'sum = ', 230, 'prod = ', -4611686018427387904, 'max = ', 4,
> 'min = ', 1)
> ('len = ', 100, 'sum = ', 261, 'prod = ', 0, 'max = ', 4, 'min = ', 1)
>
> .....
>
> ('prod =', 0, 'max =', 4, 'min =', 1)
> ('prod =', 1729382256910270464, 'max =', 4, 'min =', 1)
> ('prod =', 0, 'max =', 4, 'min =', 1)
>
> ....
>
>
> Whats going on?

Let me guess.
These are your lists (sorted):

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4]

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4]

You are using numpy.prod()

Numpy.prod overflows:

    >>> numpy.prod([-9223372036854775808, 2])
    ... 0

You want to use something that doesn't such as:

    def prod(iter):
        p = 1
        for elem in iter:
            p *= elem
        return p

and then you get your correct products:

    8002414661101704746694488837062656
    3907429033741066770846918377472
    682872717747345471717929714096013312

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

Re: ? get negative from prod(x) when x is positive integers Joshua Landau <joshua.landau.ws@gmail.com> - 2013-06-28 16:04 +0100

csiph-web