np.stack() în NumPy

Combină tablouri pe o axă nouă (np.stack), pe verticală (vstack), pe orizontală (hstack) sau ca și coloane (column_stack).

Sintaxă
np.stack(tablouri, axis=0)
np.vstack(tablouri)
np.hstack(tablouri)
np.column_stack(tablouri)

Ce face np.stack()

np.stack() pune tablouri de aceeași formă unul peste altul pe o axă nouă: din trei vectori de 4 elemente obții un tablou cu forma (3, 4) cu axis=0 sau (4, 3) cu axis=1. Spre deosebire de np.concatenate(), numărul de dimensiuni crește cu 1.

np.vstack() pune tablourile unul sub altul (rânduri); un vector 1D este tratat ca un rând. np.hstack() le pune unul lângă altul: pentru vectori 1D rezultatul este un vector mai lung, pentru tablouri 2D se adaugă coloane. np.column_stack() transformă fiecare vector 1D într-o coloană și le pune alături, util când ai coloane separate (nume de câmpuri) și vrei un tabel.

Parametri

Parametru Descriere
tablouri O listă sau un tuplu de tablouri.
axis La np.stack: poziția axei noi în rezultat (implicit 0).

Ce returnează

Un tablou nou.

Exemple

Exemplul 1: stack pe axa 0 și pe axa 1

import numpy as np

ana = np.array([9, 8, 10, 7])
mihai = np.array([6, 7, 5, 8])

print(np.stack((ana, mihai)))
print(np.stack((ana, mihai)).shape)
print(np.stack((ana, mihai), axis=1).shape)

Rezultat

[[ 9  8 10  7]
 [ 6  7  5  8]]
(2, 4)
(4, 2)

Exemplul 2: vstack și hstack

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.vstack((a, b)))
print(np.hstack((a, b)))

m = np.array([[1, 2], [3, 4]])
print(np.hstack((m, np.array([[9], [9]]))))

Rezultat

[[1 2 3]
 [4 5 6]]
[1 2 3 4 5 6]
[[1 2 9]
 [3 4 9]]

Exemplul 3: Un tabel din coloane separate cu column_stack

Fiecare vector devine o coloană: cantitate, preț unitar și total.

import numpy as np

cantitate = np.array([2, 5, 1])
pret = np.array([4.5, 7.0, 12.0])
tabel = np.column_stack((cantitate, pret, cantitate * pret))
print(tabel)
print(tabel.shape)

Rezultat

[[ 2.   4.5  9. ]
 [ 5.   7.  35. ]
 [ 1.  12.  12. ]]
(3, 3)

Greșeli frecvente

  • Folosești np.stack() pe tablouri de lungimi diferite: toate trebuie să aibă exact aceeași formă, altfel primești ValueError.
  • Folosești np.hstack() pe doi vectori 1D și te aștepți la două coloane; primești un singur vector lung. Pentru coloane folosește np.column_stack().
  • Confunzi np.stack cu np.concatenate: stack adaugă o dimensiune nouă, concatenate lungește una existentă.

Comenzi înrudite

  • np.concatenate(): Lipește mai multe tablouri unul după altul pe o axă existentă (axis=0 adaugă rânduri, axis=1 adaugă coloane).
  • np.split(): Împarte un tablou în mai multe bucăți: în părți egale (np.split), aproape egale (np.array_split) sau la anumiți indici.
  • ndarray.reshape(): Schimbă forma unui tablou (de exemplu din 12 elemente în 3 x 4) fără să-i schimbe datele.
  • ndarray.shape: Află forma unui tablou (rânduri, coloane), numărul de dimensiuni și numărul total de elemente.