Ho un booleano valore di maschera di assegnazione problema richiede un efficiente boolean maschera di funzionamento.
Si tratta di un multi-dimensione maschera e sto usando einsum
per raggiungere il risultato, ma l'operazione non è molto efficiente, e mi chiedo, se non è possibile ottenere qualche aiuto con esso
Ecco la mia attuale soluzione: (sia mask, truth_value, false_value
sono dati fittizi con tipo dimensione e forma corrisponde al mio problema.
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)
C'è qualche modo più veloce per arrivare objective
dato mask, truth_value, false_value
?
Mentre ero in attesa, ho scoperto un modo più veloce
objective = np.where(mask[...,np.newaxis], np.broadcast_to(truth_value, (1000, 50, 10)), np.broadcast_to(false_value, (1000, 50, 10)))
Ma c'è qualche alternativa più veloce ?
einsum
soluzione! un po ' più veloce rispetto al mionp.where
+np.broadcast_to
soluzione a base di.