Eu tenho um boolean valor de máscara de atribuir o problema requer eficiente boolean máscara de operação.
É um multi-dimensão máscara e eu estou usando einsum
para atingir o resultado, mas a operação não é muito eficiente, e eu estou querendo saber, se eu posso obter alguma ajuda com isso
Aqui está a minha solução atual: (tanto mask, truth_value, false_value
são dados fictícios com dtype e de forma de jogos para o meu 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)
Existe alguma maneira mais rápida para obter objective
dado mask, truth_value, false_value
?
Enquanto eu estava esperando, descobriu uma maneira mais rápida
objective = np.where(mask[...,np.newaxis], np.broadcast_to(truth_value, (1000, 50, 10)), np.broadcast_to(false_value, (1000, 50, 10)))
Mas existe alguma alternativa mais rápida ?
einsum
solução! um pouco mais rápido do que o meunp.where
+np.broadcast_to
solução.