ndarray.ravel() și flatten() în NumPy

Transformă un tablou cu mai multe dimensiuni într-unul 1D: ravel dă o vedere când poate, flatten dă mereu o copie.

Sintaxă
a.ravel(order='C')
np.ravel(a, order='C')
a.flatten(order='C')

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ște flatten().
  • Te bazezi că ravel() dă mereu o vedere. După .T sau 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.