
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.
Opanuj analizę danych w Pythonie z moim kursem!
Opanujesz podstawy programowania w Pythonie, w tym typy danych, zmienne, listy, słowniki, funkcje oraz obsługę błędów. Nauczysz się korzystać z biblioteki pandas do zaawansowanej analizy danych i pracy z różnymi rodzajami danych. Zrozumiesz proces analizy, eksploracji (EDA) i wizualizacji. Tworzenie własnych funkcji przygotuje Cię do rozmów kwalifikacyjnych i rozwiązywania rzeczywistych problemów biznesowych.
Zostań analitykiem danych – dołącz do KajoDataSpace!
Najlepsza ścieżka do zawodu analityka danych. Dostęp do pełnych wersji kursów online z Excela, SQLa, Tableau i Pythona z certyfikatami + specjalistycznych webinarów z PowerBI.
Ekskluzywana ale pomagająca sobie społeczność.
Ponad 61 godzin materiałów video.
Spotkania LIVE co miesiąc.
Mój osobisty mentoring.