¿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?
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 buclefor
, por otro lado, está concatenando las observaciones y acciones para cada elemento ena
y almacenándolas en un solo arregloe
. 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 temporaltemp
y agregar la concatenación de la observación y acción para cada elemento ena
a la lista. Luego, utilizanp.array
para crear el arreglo final a partir de la lista.Aquí está el código modificado:
Esto debería darte el mismo resultado que la comprensión de lista.