Aquí está el espacio de nombres correcto para las funciones:
Ambas funciones devuelven matrices 1D aplanadas que apuntan a las nuevas estructuras de memoria.
import numpy
a = numpy.array([[1,2],[3,4]])
r = numpy.ravel(a)
f = numpy.ndarray.flatten(a)
print(id(a))
print(id(r))
print(id(f))
print(r)
print(f)
print("\nbase r:", r.base)
print("\nbase f:", f.base)
---returns---
140541099429760
140541099471056
140541099473216
[1 2 3 4]
[1 2 3 4]
base r: [[1 2]
[3 4]]
base f: None
En el ejemplo superior:
- las ubicaciones de memoria de los resultados son diferentes,
- los resultados se ven iguales
- aplanar devolvería una copia
- Ravel devolvería una vista.
¿Cómo verificamos si algo es una copia? Usando el .base
atributo de la ndarray
. Si es una vista, la base será la matriz original; si es una copia, la base lo será None
.