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.

Calculando el vector promedio para cada elemento único en una lista.

Tengo una lista de la siguiente forma:

mylist = [([256, 408, 147, 628], 'size'), ([628, 526, 236, 676], 'camera'),
 ([526, 876, 676, 541], 'camera'), ([567, 731, 724, 203], 'size'),.....]

Y tiene un tamaño de alrededor de 8000+.

Contiene muchas entradas duplicadas, en realidad solo hay 100 palabras únicas en esta lista y me gustaría reducir esta lista a un tamaño de 100 (el número de palabras únicas) tomando el vector promedio de cada aparición de esa palabra.

Por ejemplo, mi nueva lista tendrá la forma:

newlist = [([411.5,569.5,435.5,415.5],'size',.....] # He tomado los valores promedio de 'size'
aquí y quiero repetir esto para cada palabra única

y tendrá una longitud de 100.

¿Cómo puedo hacer esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para realizar esta tarea, puedes utilizar un diccionario para almacenar el promedio de cada palabra única. Recorre la lista original y, para cada elemento, extrae la palabra y el vector. Luego, agrega el vector a la clave correspondiente en el diccionario e incrementa un contador para llevar un registro del número de apariciones de esa palabra.

    Después de recorrer toda la lista, puedes recorrer el diccionario y calcular el vector promedio para cada palabra dividiendo la suma de los vectores por el número de apariciones. Almacena este vector promedio y la palabra como una tupla en la nueva lista.

    Aquí tienes un código de ejemplo para realizar esta tarea:

    # Inicializa un diccionario vacío y un contador
    word_dict = {}
    word_count = {}
    
    # Recorre la lista original
    for element in mylist:
        vector, word = element[0], element[1]
        if word not in word_dict:
            # Si la palabra no está en el diccionario, agrega una nueva clave
            # con el vector como valor
            word_dict[word] = vector
            word_count[word] = 1
        else:
            # Si la palabra ya está en el diccionario, suma el vector
            # al valor existente e incrementa el contador
            word_dict[word] = [x + y for x, y in zip(word_dict[word], vector)]
            word_count[word] += 1
    
    # Recorre el diccionario y calcula el vector promedio
    newlist = []
    for word in word_dict:
        avg_vector = [x / word_count[word] for x in word_dict[word]]
        newlist.append((avg_vector, word))
    

    La variable newlist resultante tendrá la forma deseada con palabras únicas y sus vectores promedio correspondientes.

Comments are closed.