Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tem um comportamento do np.vectorize que costuma gerar confusão em código de Python científico quando a função usada tem efeito colateral visível, como print, log ou contadores. O cenário é simples. Você cria uma função que imprime o valor recebido e a passa para np.vectorize:
import numpy as np def f(x): print(f"hi {x}") return x print(np.vectorize(f)(["input"])) A expectativa intuitiva seria ver hi input uma vez só. Mas aparece duas vezes. ## O que está acontecendo Sem otypes ou signature, o np.vectorize faz uma chamada extra usando o primeiro argumento para descobrir o formato e a quantidade de saídas. Ou seja: ele não está “rodando a mais sem motivo”. ele está inferindo o contrato da função em tempo de execução. ## O que fazer na prática - Declarar otypes quando você já sabe o tipo de retornocache=True quando a chamada extra for incômoda e fizer sentidonp.vectorize melhora ergonomia, mas não transforma sua função em primitive de alto desempenho. Quando existe side effect, essa diferença fica gritante. Queria ouvir como vocês lidam com isso em revisão de código: vocês aceitam np.vectorize como conveniência ou já tratam como alerta para refatoração?Carregando comentários...