On 04/13/2010 11:44 PM, Gökhan Sever wrote:


On Wed, Apr 14, 2010 at 1:34 AM, Warren Weckesser <warren.weckes...@enthought.com <mailto:warren.weckes...@enthought.com>> wrote:

    Gökhan Sever wrote:
    >
    >
    > On Wed, Apr 14, 2010 at 1:10 AM, Peter Shinners
    <p...@shinners.org <mailto:p...@shinners.org>
    > <mailto:p...@shinners.org <mailto:p...@shinners.org>>> wrote:
    >
    >     I have an array that represents the number of times a value
    has been
    >     given. I'm trying to find a direct numpy way to add into
    these sums
    >     without requiring a Python loop.
    >
    >     For example, say there are 10 possible values. I start with an
    >     array of
    >     zeros.
    >
    > >>> counts = numpy.zeros(10, numpy.int <http://numpy.int>
    <http://numpy.int>)
    >
    >     Now I get an array with several values in them, I want to
    add into
    >     counts. All I can think of is a for loop that will give my the
    >     results I
    >     want.
    >
    >
    > >>> values = numpy.array((2, 8, 1))
    > >>> for v in values:
    >     ...    counts[v] += 1
    > >>> print counts
    >     [0 1 1 0 0 0 0 0 1 0]
    >
    >
    > This is easy:
    >
    > I[3]: a
    > O[3]: array([ 0.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.])
    >
    > I[4]: a = np.zeros(10)
    >
    > I[5]: b = np.array((2,8,1))
    >
    > I[6]: a[b] = 1
    >
    > I[7]: a
    > O[7]: array([ 0.,  1.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.])
    >
    > Let me think about the other case :)
    >
    >
    >     I also need to handle the case where a value is listed more
    than once.
    >     So if values is (2, 8, 1, 2) then count[2] would equal 2.
    >


    numpy.bincount():


    In [1]: import numpy as np

    In [2]: x = np.array([2,8,1,2,7,7,2,7,0,2])

    In [3]: np.bincount(x)
    Out[3]: array([1, 1, 4, 0, 0, 0, 0, 3, 1])



I knew a function exists in numpy for this case too :)

This is also safer way to handle the given situation to prevent index out of bounds errors.

Thanks guys. Numpy always surprises me. It's like you guys have borrowed Guido's time machine.
This is running far faster than I ever hoped.

My next problem involves a bit of indexing and reordering. But I'm gonna spend a night of my own time to see where I can get with it.
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to