Aqui está o espaço para nome correto para as funções:
Ambas as funções retornam matrizes 1D achatadas, apontando para as novas estruturas de memória.
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
No exemplo superior:
- os locais de memória dos resultados são diferentes,
- os resultados têm a mesma aparência
- achatar retornaria uma cópia
- Ravel retornaria uma visão.
Como verificamos se algo é uma cópia? Usando o .base
atributo do ndarray
. Se for uma visualização, a base será a matriz original; se for uma cópia, a base será None
.