Tenho um array a
de índices crescentes, por exemplo [2 5 9 10]
, , que indica posições de mudança de valor. Supondo que os valores de saída sejam 0
e 1
, quero obter o array b
:
[0 0 1 1 1 0 0 0 0 1 0]
Existe alguma mágica no NumPy para se a
transformar b
?
Um caminho entre muitos outros
Alguma explicação (mas acho que o código, neste caso raro, é sua própria explicação, já que é bem fácil, uma vez que você o vê) x (after
x[a]=1
) contém 1 em cada posição dada em a. Entãox.cumsum()
contém um valor que incrementa para cada um desses valores: 0 para o 2 primeiro, então 1 para o 3 depois, então 2, então 3, então 4... Entãox.cumsum()%2
alterna entre 1 e 0.Note que eu uso
np.uint8
type porque sou econômico, e não consigo deixar de pensar "por que eu deveria pagar 32 bits quando 8 são o suficiente para um array de tamanho 11". Mas na realidade, já que 256 é par, não importaria mesmo sea
tivesse bilhões de valores. Apenasx.cumsum()
voltaria de 255 para 0 por causa do estouro. E entãox.cumsum()%2
teria o mesmo valor.Provavelmente você pode tentar
np.diff
+np.repeat
como abaixoo que dá
Se S = [2 5 9 10] e res o resultado final, observando que o valor é 0 em todos os lugares, exceto dentro das fatias S[0]:S[1], S[2]:S[3], ... onde é 1: