Ce face ndarray.ravel() și flatten()
Ambele metode „aplatizează” tabloul: pun toate elementele pe un singur rând, citind implicit rând după rând. Diferența este la memorie.
ravel() returnează o vedere (aceleași date) dacă elementele sunt deja așezate continuu în memorie, ceea ce e mai rapid, dar o modificare în rezultat schimbă și tabloul inițial. Dacă nu se poate (de exemplu după o transpunere), face o copie.
flatten() face întotdeauna o copie nouă: poți modifica rezultatul fără grijă.
Parametri
| Parametru | Descriere |
|---|---|
order |
'C' (implicit): rând după rând. 'F': coloană după coloană. |
Ce returnează
Un tablou 1D cu toate elementele.
Exemple
Exemplul 1: Aplatizare
import numpy as np
note = np.array([[9, 7, 10],
[8, 6, 9]])
print(note.ravel())
print(note.flatten())
print(note.ravel(order="F"))
Rezultat
[ 9 7 10 8 6 9]
[ 9 7 10 8 6 9]
[ 9 8 7 6 10 9]
Exemplul 2: Vedere față de copie
Modificarea prin ravel() ajunge în tabloul inițial; cea prin flatten() nu.
import numpy as np
note = np.array([[9, 7, 10],
[8, 6, 9]])
r = note.ravel()
r[0] = 1
f = note.flatten()
f[1] = 1
print(note)
print("ravel are aceleași date:", np.shares_memory(note, r))
print("flatten are aceleași date:", np.shares_memory(note, f))
Rezultat
[[ 1 7 10]
[ 8 6 9]]
ravel are aceleași date: True
flatten are aceleași date: False
Greșeli frecvente
- Modifici rezultatul lui
ravel()crezând că lucrezi pe o copie. Dacă vrei să modifici fără efecte, foloseșteflatten(). - Te bazezi că
ravel()dă mereu o vedere. După.Tsau după slicing cu pas, rezultatul este o copie.
Comenzi înrudite
ndarray.reshape(): Schimbă forma unui tablou (de exemplu din 12 elemente în 3 x 4) fără să-i schimbe datele.Copie și vedere (copy vs view): Explică diferența dintre o vedere (aceleași date) și o copie în NumPy și cum le recunoști cu .base și np.shares_memory.ndarray.T și np.transpose(): Transpune un tablou: rândurile devin coloane și coloanele devin rânduri.