0
votes

Comment attribuer des valeurs aux indices donnés à un tableau et à la moyenne des indices répétés?

Y a-t-il un moyen net d'affecter des valeurs aux indices donnés dans une matrice et des valeurs moyennes dans des indices répétés? Par exemple: xxx

et je souhaite affecter des valeurs dans la matrice B sur le tableau A dans les indices correspondants indiqués dans "IND", et un [1] doit être en moyenne de 2 et 3.

Je peux essayer une boucle pour la boucle: xxx

mais ce code a l'air sale. Y a-t-il un meilleur moyen de faire le travail?


0 commentaires

4 Réponses :


1
votes

0 commentaires

0
votes

Voici une méthode vectorisée. La logique réelle est proche de votre propre solution.

n,d = (np.bincount(ind,x,a.size) for x in (b,None))
valid = d!=0
np.copyto(a,np.divide(n,d,where=valid),where=valid)


0 commentaires

0
votes
In [59]: a = np.zeros(5)                                                                                     
In [60]: a = np.zeros(5) 
    ...: hit = np.zeros_like(a) 
    ...: np.add.at(a,ind,b) 
    ...: np.add.at(hit,ind,1)                                                                                                      
In [61]: a                                                                                                   
Out[61]: array([0., 5., 4., 5., 0.])
In [62]: hit                                                                                                 
Out[62]: array([0., 2., 1., 1., 0.])

0 commentaires

0
votes

Cela pourrait ne pas être nécessairement plus propre ou plus rapide, mais voici une alternative que je pense est facile à lire:

a = [[] for _ in range(5)]
for i, x in zip(ind, b):
    a[i].append(x)
[np.mean(x) if len(x) else 0 for x in a]


0 commentaires