6
votes

Groupe Python par array A et résumez le tableau B - Performance

donné deux matrices non commandées de mêmes longueurs A et B:

def unique_Unutbu(a,b):

    x=np.bincount(a,weights=b)
    aResult = np.unique(a)
    bResult = x[aResult]


1 commentaires

Je voulais dire que vous ne pouvez pas supposer que la liste A est triée.


3 Réponses :


2
votes

Que diriez-vous de cette approche:

aResult = pdf.keys()
bResult = pdf.values()


4 commentaires

Vous pouvez utiliser defaultDict (int), c'est plus propre.


Merci! Je ne le savais pas. Réponse mise à jour :)


J'aime l'approche, c'est joli. Malheureusement, il semble être plus lent que «Approche 1» surtout pour de longs tableaux ...


@HELGA: J'ai réécrit la mise en œuvre de Pablo en Cython en utilisant Unorded_map . ~ 10-30 fois plus vite.




6
votes

APPROCHE D'ICI SIMPRIMÉS DE @ Unutbu's One :

import numpy as np

def f(a, b):
    result_a, inv_ndx = np.unique(a, return_inverse=True)
    result_b = np.bincount(inv_ndx, weights=b)
    return result_a, result_b


0 commentaires