Jak działa numpy flatten w języku Python? Przykład zastosowania

Jak działa numpy flatten w języku Python? Przykład zastosowania
„`html

Jeśli kiedykolwiek pracowałeś z biblioteką NumPy w Pythonie, to z pewnością natrafiłeś na problem zmiany kształtu tablicy. Czasami konieczne jest spłaszczenie wielowymiarowej tablicy do jednego wymiaru. Właśnie do tego służy metoda numpy.flatten(). W tym artykule opowiem, jak dokładnie działa, jakie ma parametry i jak różni się od innych metod zmiany kształtu tablicy.

Co to jest numpy.flatten()?

Metoda numpy.flatten() pozwala na spłaszczenie wielowymiarowej tablicy NumPy do jednego wymiaru. Tworzy nową kopię danych w pamięci, co oznacza, że nie modyfikuje oryginalnej tablicy, lecz zwraca nową.

Oto prosty przykład, jak działa flatten():

import numpy as np

# Tworzymy 2-wymiarową tablicę NumPy
arr = np.array([[1, 2, 3], [4, 5, 6]])

# Spłaszczamy tablicę
flattened_arr = arr.flatten()

print(flattened_arr)
# Wynik: [1 2 3 4 5 6]

Jak widać, metoda flatten() przekształciła dwuwymiarową tablicę (2×3) w jednowymiarową tablicę o sześciu elementach.

Parametry metody flatten()

Metoda flatten() przyjmuje jeden opcjonalny argument: order. Określa on sposób, w jaki elementy są spłaszczane.

Możliwe wartości parametru order:

  • 'C' – (wartość domyślna) odczytuje elementy wierszami (porządek C, jak w języku C).
  • 'F' – odczytuje elementy kolumnami (porządek Fortrana).
  • 'A' – przystosowuje się do oryginalnego porządku pamięci tablicy.
  • 'K' – utrzymuje oryginalny porządek pamięci, jeśli to możliwe.

Przykład zastosowania różnych wartości order:

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.flatten(order='C'))  # Wynik: [1 2 3 4 5 6] (wiersz po wierszu)
print(arr.flatten(order='F'))  # Wynik: [1 4 2 5 3 6] (kolumna po kolumnie)

Jak flatten() różni się od ravel()?

W NumPy istnieje jeszcze jedna metoda o podobnym działaniu – ravel(). Główna różnica polega na tym, że flatten() zawsze zwraca kopię tablicy, podczas gdy ravel() zwraca widok na oryginalną tablicę (jeśli to możliwe).

Spójrzmy na różnicę w działaniu:

arr = np.array([[1, 2, 3], [4, 5, 6]])

flattened = arr.flatten()
flattened[0] = 99

print(arr)  # Oryginalna tablica nie zmienia się
print(flattened)  # Nowa tablica ma zmienioną wartość

raveled = arr.ravel()
raveled[0] = 99

print(arr)  # Oryginalna tablica również się zmienia, bo ravel() tworzy widok

Podsumowując:

Metoda Zmienia oryginalną tablicę? Tworzy kopię?
flatten() Nie Tak
ravel() Tak (jeśli to możliwe) Nie

Zastosowanie numpy.flatten() w praktyce

W praktyce flatten() jest przydatne w wielu sytuacjach, np. podczas:

  • Przygotowywania danych dla modeli uczenia maszynowego.
  • Przetwarzania obrazów, gdzie wartości pikseli trzeba zamienić na wektor jednowymiarowy.
  • Operacji na macierzach, które wymagają jednolitego zbioru danych.

Przykład zastosowania w kontekście obrazów:

import numpy as np
from PIL import Image

# Wczytujemy obraz jako tablicę NumPy
image = Image.open('example.jpg').convert('L')  # Konwersja do skali szarości
image_array = np.array(image)

# Spłaszczamy obraz
flattened_image = image_array.flatten()

print(flattened_image.shape)  # Wynik: (suma wszystkich pikseli,)

Podsumowanie

Metoda numpy.flatten() to proste, ale bardzo użyteczne narzędzie do spłaszczania tablic NumPy. Jest bezpieczna, ponieważ zwraca nową kopię danych, a jej działanie można dostosować za pomocą parametru order. Warto jednak znać różnice między flatten() a ravel(), aby wybrać najlepsze rozwiązanie w danym przypadku.

„` Inny ciekawy artykuł: Jak działa numpy ravel w języku Python? Przykład zastosowania
KajoDataSpace