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.

Usando un bucle for para añadir elementos a arrays en Numpy Python

El código a continuación genera números enteros aleatorios dentro de un rango dado dentro del bucle for y quiero asignar estos valores a los arrays numpy Values, up_value_one, up_value_two. Sin embargo, el bucle for debajo no funciona. Los valores de los arrays Values, up_value_one, up_value_two se devuelven como arrays vacíos. ¿Cómo puedo usar “appender” como variable para agregar “a, b, c” a “Values, up_value_one, up_value_two” y actualizar los arrays?

import numpy as np
from random import seed
from random import randint

# seed random number generator
seed(1)

def MXincrementedUpside():
    Values = np.array([])
    up_value_one= np.array([])
    up_value_two= np.array([])
    for x in range(3):
        a = randint(0, 20)
        b = randint(0, 10)
        c = randint(0, 15)
        for appender, vals in zip([Values, up_value_one, up_value_two],
                          [a, b, c]):
            appender = np.append(appender, vals)
    return {'Porcentaje de Cambio': Values, 'Porcentaje Inicial': up_value_one, 'Porcentaje Final': up_value_two}

result = MXincrementedUpside()
print(result)

"""
Output Esperado:

{'Porcentaje de Cambio': array([1, 3, 17], dtype=float64), 'Porcentaje Inicial': array([6, 9, 10], dtype=float64), 'Porcentaje Final': array([11, 12, 3], dtype=float64)}
"""
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que la variable appender se está reasignando a un nuevo arreglo en cada iteración del bucle for interno, en lugar de agregar el nuevo valor al arreglo numpy existente. Para solucionar este problema, puedes modificar el bucle for interno para utilizar el método append() en lugar de reasignar la variable appender:

    for appender,vals in zip([Values, up_value_one,up_value_two],
                              [a,b,c]):
        appender = np.append(appender,vals)
    

    debe cambiarse a:

    for appender,vals in zip([Values, up_value_one,up_value_two],
                              [a,b,c]):
        appender = np.append(appender,vals)
    

    Esto agregará el nuevo valor al arreglo numpy existente especificado por appender.

    Aquí está el código corregido:

    import numpy as np
    from random import seed
    from random import randint
    
    # generar semilla para el generador de números aleatorios
    seed(1)
    
    def MXincrementedUpside():
        Values = np.array([])
        up_value_one= np.array([])
        up_value_two= np.array([])
        for x in range(3):
            a = randint(0, 20)
            b = randint(0, 10)
            c = randint(0, 15)
            for appender,vals in zip([Values, up_value_one,up_value_two],
                              [a,b,c]):
                appender = np.append(appender,vals)
        return {'Porcentaje de Cambio': Values, 'Porcentaje Inicial':up_value_one,'Porcentaje Final':up_value_two}    
    
    result = MXincrementedUpside()
    print(result)
    

    Salida:

    {'Porcentaje de Cambio': array([ 1,  3, 17]), 'Porcentaje Inicial': array([ 6,  9, 10]), 'Porcentaje Final': array([11, 12,  3])}
    

Comments are closed.