Am un boolean masca valoare atribuirea problemă care necesită eficient boolean masca de funcționare.
Este un multi-dimensiune masca și eu sunt, folosind einsum
pentru a obține rezultatul, dar operațiunea nu este foarte eficient, și mă întreb dacă pot obține ajutor
Aici este soluția mea actuală: (ambele mask, truth_value, false_value
sunt date fictive cu dtype și forma meciuri la problema mea.
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)
Există vreo modalitate mai rapidă de a obține objective
dat mask, truth_value, false_value
?
În timp ce am fost de așteptare, dat seama de un mod mai rapid
objective = np.where(mask[...,np.newaxis], np.broadcast_to(truth_value, (1000, 50, 10)), np.broadcast_to(false_value, (1000, 50, 10)))
Dar exista vreo alternativa mai repede ?
einsum
soluție! un pic mai repede decâtnp.where
+np.broadcast_to
soluție pe bază de.