np.concatenate() în NumPy

Lipește mai multe tablouri unul după altul pe o axă existentă (axis=0 adaugă rânduri, axis=1 adaugă coloane).

Sintaxă
np.concatenate((a1, a2, ...), axis=0, dtype=None)

Ce face np.concatenate()

np.concatenate() primește o listă sau un tuplu de tablouri și le lipește pe o axă care există deja. Pentru tablouri 1D rezultatul este un tablou mai lung. Pentru tablouri 2D, axis=0 (implicit) pune rândurile unui tablou sub ale celuilalt, iar axis=1 pune coloanele alături.

Tablourile trebuie să aibă același număr de dimensiuni și aceeași lungime pe toate axele, în afară de cea de lipire. Altfel primești ValueError. Cu axis=None, tablourile sunt aplatizate înainte de lipire.

Parametri

Parametru Descriere
(a1, a2, ...) Tablourile de lipit, într-o listă sau un tuplu.
axis Axa de lipire; implicit 0. None aplatizează tablourile.
dtype Tipul tabloului rezultat (NumPy 1.20+).

Ce returnează

Un tablou nou.

Exemple

Exemplul 1: Lipirea a două tablouri 1D

import numpy as np

trim1 = np.array([1200, 950, 1430])
trim2 = np.array([1100, 1600, 1550])
an = np.concatenate((trim1, trim2))
print(an)
print(an.shape)

Rezultat

[1200  950 1430 1100 1600 1550]
(6,)

Exemplul 2: Rânduri noi și coloane noi

import numpy as np

iasi_cluj = np.array([[12, 15], [20, 18]])
brasov = np.array([[8, 9]])
martie = np.array([[11], [22]])

print(np.concatenate((iasi_cluj, brasov), axis=0))
print(np.concatenate((iasi_cluj, martie), axis=1))

Rezultat

[[12 15]
 [20 18]
 [ 8  9]]
[[12 15 11]
 [20 18 22]]

Exemplul 3: Forme care nu se potrivesc

Un rând cu 3 valori nu poate fi pus sub rânduri cu 2 valori.

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6, 7]])
try:
    np.concatenate((a, b))
except ValueError as e:
    print("Eroare:", e)

Rezultat

Eroare: all the input array dimensions except for the concatenation axis must match exactly, but along dimension 1, the array at index 0 has size 2 and the array at index 1 has size 3

Greșeli frecvente

  • Dai tablourile ca argumente separate: np.concatenate(a, b). Al doilea argument este axis; tablourile se pun într-o listă sau un tuplu: np.concatenate((a, b)).
  • Încerci să adaugi un rând 1D (np.array([8, 9])) la un tablou 2D: au număr diferit de dimensiuni. Fă-l 2D cu [[8, 9]] sau folosește np.vstack().
  • Adaugi câte un element într-o buclă cu np.concatenate: fiecare apel copiază tot tabloul. Strânge valorile într-o listă Python și transformă lista la final.

Comenzi înrudite

  • np.stack(): Combină tablouri pe o axă nouă (np.stack), pe verticală (vstack), pe orizontală (hstack) sau ca și coloane (column_stack).
  • 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.