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.

Extraiga el primer y último índice de todas las secuencias de unos en una matriz numpy y añádalos a una lista.

Tengo un vector de máscara para un archivo de audio (serie temporal) que contiene unos (1s) y ceros (0s). El vector de máscara contendrá largas secuencias de unos (1s) para los intervalos en la señal de audio cuando hay alguna actividad favorable, y ceros (0s) cuando hay ruido. Básicamente, quiero extraer todas las partes de actividad de la señal de audio y almacenarlas como archivos de audio separados. Por esta razón, sería útil encontrar la forma más eficiente de extraer los índices de inicio y fin de todas las secuencias de unos (1s) del vector de máscara y agregarlos, por ejemplo, a una lista.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una manera de extraer los índices de inicio y fin de todas las secuencias de unos de un vector de máscara es utilizando la biblioteca numpy. Aquí tienes un ejemplo:

    import numpy as np
    
    # vector de máscara
    mask = np.array([0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0])
    
    # obtener los índices donde el vector de máscara cambia de 0 a 1 o de 1 a 0
    mask_diff = np.diff(mask)
    
    # encontrar los índices de inicio y fin de todas las secuencias de unos
    start_indices = np.where(mask_diff == 1)[0] + 1
    end_indices = np.where(mask_diff == -1)[0] + 1
    
    # crear una lista de tuplas que contienen los índices de inicio y fin de todas las secuencias de unos
    audio_segments = list(zip(start_indices, end_indices))
    
    # imprimir la lista de segmentos de audio
    print(audio_segments)
    

    Salida:

    [(1, 4), (7, 8), (11, 15)]
    

    En este ejemplo, la función diff de numpy se utiliza para encontrar las diferencias entre elementos consecutivos del vector de máscara. Luego usamos where para encontrar los índices donde el vector de máscara cambia de 0 a 1 o de 1 a 0. Dado que la función where devuelve una tupla, accedemos al primer elemento de la tupla y le sumamos 1 para obtener los índices de inicio y fin reales de los segmentos de audio. Finalmente, creamos una lista de tuplas que contiene los índices de inicio y fin de todas las secuencias de unos, los cuales se pueden utilizar para extraer los segmentos de audio y almacenarlos como archivos de audio separados.

Comments are closed.