[SciPy-User] Accumulation sum using indirect indexes
Warren Weckesser
warren.weckesser@enthought....
Thu Feb 2 12:16:20 CST 2012
On Wed, Feb 1, 2012 at 10:34 AM, Alexander Kalinin
<alec.kalinin@gmail.com>wrote:
> Yes, but for large data sets loops is quite slow. I have tried Pandas
> groupby.sum() and it works faster.
>
>
Pandas is probably the correct tool to use for this, but it will be nice
when numpy has a native "group-by" capability.
For what its worth (had to scratch the itch, so to speak), the attached
script provides a "pure numpy" implementation without a python loop. The
output of the script is
In [53]: run pseudo_group_by.py
Label Data
20 [1 2 3]
20 [1 2 4]
10 [3 3 1]
0 [5 0 0]
20 [1 9 0]
10 [2 3 4]
20 [9 9 1]
Label Num. Sum
0 1 [5 0 0]
10 2 [5 6 5]
20 4 [12 22 8]
A drawback of the method is that it will make a reordered copy of the
data. I haven't compared the performance to pandas.
Warren
>
> 2012/2/1 Frédéric Bastien <nouiz@nouiz.org>
>
>> It will be slow, but you can make a python loop.
>>
>> Fred
>> On Jan 31, 2012 3:34 PM, "Alexander Kalinin" <alec.kalinin@gmail.com>
>> wrote:
>>
>>> Hello!
>>>
>>> I use SciPy in computer graphics applications. My task is to calculate
>>> vertex normals by averaging faces normals. In other words I want to
>>> accumulate vectors with the same ids. For example,
>>>
>>> ids = numpy.array([0, 1, 1, 2])
>>> n = numpy.array([ [0.1, 0.1, 0.1], [0.1, 0.1, 0.1], [0.1, 0.1, 0.1],
>>> [0.1, 0.1 0.1] ])
>>>
>>> I need result:
>>> nv = ([ [0.1, 0.1, 0.1], [0.2, 0.2, 0.2], [0.1, 0.1, 0.1]])
>>>
>>> The most simple code:
>>> nv[ids] += n
>>> does not work, I know about this. For 1D arrays I use
>>> numpy.bincount(...) function. But this function does not work for 2D arrays.
>>>
>>> So, my question. What is the best way calculate accumulation sum for 2D
>>> arrays using indirect indexes?
>>>
>>> Sincerely,
>>> Alexander
>>>
>>> _______________________________________________
>>> SciPy-User mailing list
>>> SciPy-User@scipy.org
>>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>>
>>>
>> _______________________________________________
>> SciPy-User mailing list
>> SciPy-User@scipy.org
>> http://mail.scipy.org/mailman/listinfo/scipy-user
>>
>>
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/scipy-user/attachments/20120202/0f1e3437/attachment.html
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pseudo_group_by.py
Type: application/octet-stream
Size: 1454 bytes
Desc: not available
Url : http://mail.scipy.org/pipermail/scipy-user/attachments/20120202/0f1e3437/attachment.obj
More information about the SciPy-User
mailing list