J'ai un boolean valeur du masque de l'attribution problème l'exige efficace boolean masque de fonctionnement.
C'est un multi-dimension de masque et je suis en utilisant einsum
pour atteindre le résultat, mais l'opération n'est pas très efficace, et je me demandais, si je peux obtenir un peu d'aide avec elle
Voici ma solution actuelle: (les deux mask, truth_value, false_value
sont des données factices avec dtype et la forme correspond à mon problème.
mask = np.random.randn(1000, 50)> 0.5
truth_value = np.random.randn(50, 10)
false_value = np.random.randn(10)
objective = np.einsum('ij,jk->ijk', mask, truth_value) + np.einsum('ij,k->ijk', ~mask, false_value)
Est-il un moyen plus rapide pour obtenir objective
compte tenu de mask, truth_value, false_value
?
Pendant que j'attendais, trouvé un moyen plus rapide
objective = np.where(mask[...,np.newaxis], np.broadcast_to(truth_value, (1000, 50, 10)), np.broadcast_to(false_value, (1000, 50, 10)))
Mais est-il une alternative plus rapide ?
einsum
solution! un peu plus vite que monnp.where
+np.broadcast_to
en fonction de la solution.