Mám boolean hodnota masky přiřazení problém vyžaduje efektivní boolean maska provoz.
Je to multi-rozměr masky a já jsem s použitím einsum
k dosažení výsledku, ale operace není příliš efektivní, a zajímalo by mě, jestli můžu dostat nějakou pomoc s tím
Tady je moje aktuální řešení: (jak mask, truth_value, false_value
jsou dummy data s dtype a tvar odpovídá na můj problém.
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)
Existuje nějaký rychlejší způsob, jak se dostat objective
vzhledem mask, truth_value, false_value
?
Zatímco jsem čekal, zjistil, rychlejší způsob
objective = np.where(mask[...,np.newaxis], np.broadcast_to(truth_value, (1000, 50, 10)), np.broadcast_to(false_value, (1000, 50, 10)))
Ale je tam nějaký rychlejší alternativu ?
einsum
řešení! trochu rychlejší než mojenp.where
+np.broadcast_to
řešení na bázi.