es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contador de array de Numpy con reinicio

Tengo una matriz de numpy con solo -1, 1 y 0, como esta:

np.array([1,1,-1,-1,0,-1,1])

Me gustaría tener una nueva matriz que cuente los -1 encontrados. El contador debe reiniciarse cuando aparece un 0 y permanecer igual cuando es un 1:

Resultado deseado:

np.array([0,0,1,2,0,1,1])

La solución debe ser poco consumidora de tiempo cuando se utiliza con una matriz más grande (hasta 100,000).


Editar: Gracias por tu contribución, por ahora tengo una solución funcional.

Todavía estoy buscando una forma no iterativa de resolverlo (sin bucle for). ¿Quizás con una serie de pandas y el método cumsum()?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución utilizando la Serie pandas y el método cumsum() es:

    import pandas as pd
    import numpy as np
    
    arr = np.array([1,1,-1,-1,0,-1,1])
    
    s = pd.Series(arr)
    mask = s.eq(-1)
    
    reset_mask = s.eq(0)
    reset_idx = reset_mask.cumsum() - 1
    
    result = mask.groupby(reset_idx).cumsum()
    result[reset_mask] = 0
    
    print(result.values)
    

    Este código crea una Serie pandas a partir del arreglo numpy, aplica una máscara para identificar los valores -1, y luego los agrupa por la posición de los ceros en el arreglo original utilizando el método cumsum(). Esto crea grupos de valores -1 que deben reiniciarse cuando se encuentra un cero. Finalmente, el resultado se establece en cero cuando se encuentra un cero, como se solicita.

    Este código debería manejar eficientemente arreglos de hasta 100,000 elementos, ya que está vectorizado con funciones de pandas y numpy.

Comments are closed.