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.

¿Por qué el resultado de usar np.concatenate con un bucle for y una comprensión de lista no es el mismo?

Me pregunto por qué los resultados de estos dos fragmentos de código son diferentes y quiero saber cómo usar solo un bucle for para lograr el mismo resultado que la comprensión de listas:

a = []
c = []

n = np.array([1,2],dtype=np.float32)
m = np.array([1,3],dtype=np.float32)
b = np.array([3], dtype=np.float32)

a.append([n, m, b])
a.append([n, m, b])
a.append([n, m, b])

e = np.array([])
for obs,_,act in a:
g = [obs,act]
e = np.concatenate([e,g])
e = np.array([e])

f = np.array( [np.concatenate([obs,act]) for obs,_,act in a ])

print(“usando bucle for:\n”, e)
print(“usando comprensión de listas:\n”, f)

El resultado es:

usando bucle for:
[[array([1., 2.], dtype=float32) array([3.], dtype=float32)
array([1., 2.], dtype=float32) array([3.], dtype=float32)
array([1., 2.], dtype=float32) array([3.], dtype=float32)]]

usando comprensión de listas:
[[1. 2. 3.]
[1. 2. 3.]
[1. 2. 3.]]

¿Por qué? ¿Y cómo puedo hacer para que el bucle for tenga el mismo resultado que la comprensión de listas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    La razón de los resultados diferentes es que la comprensión de lista está creando un nuevo arreglo al concatenar las observaciones y acciones para cada elemento en a. El bucle for, por otro lado, está concatenando las observaciones y acciones para cada elemento en a y almacenándolas en un solo arreglo e. Esto resulta en una forma diferente para el arreglo final.

    Para lograr el mismo resultado que la comprensión de lista usando solo un bucle for, puedes crear una lista temporal temp y agregar la concatenación de la observación y acción para cada elemento en a a la lista. Luego, utiliza np.array para crear el arreglo final a partir de la lista.

    Aquí está el código modificado:

    a = []
    c = []
    
    n = np.array([1,2],dtype=np.float32)
    m = np.array([1,3],dtype=np.float32)
    b = np.array([3], dtype=np.float32)
    
    a.append([n, m, b])
    a.append([n, m, b])
    a.append([n, m, b])
    
    temp = []
    for obs, _, act in a:
        temp.append(np.concatenate([obs, act]))
    
    f = np.array(temp)
    e = np.array([np.concatenate(temp)])
    
    print("usando bucle for:\n", e)
    print("usando comprensión de lista:\n", f)
    

    Esto debería darte el mismo resultado que la comprensión de lista.

Comments are closed.