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

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

Podczas pracy z biblioteką NumPy w języku Python często musimy operować na tablicach wielowymiarowych i przekształcać je w jednowymiarowe struktury. Jednym z najwygodniejszych sposobów na „spłaszczenie” tablicy jest wykorzystanie funkcji numpy.ravel(). W tym artykule wyjaśnię szczegółowo, jak działa numpy.ravel() i pokażę konkretne przykłady jego zastosowania.

Co robi funkcja numpy.ravel()?

Funkcja numpy.ravel() zwraca jednowymiarową wersję wejściowej tablicy. Można ją traktować jako sposób na „spłaszczenie” tablicy do postaci wektora. Co ważne, jeśli to możliwe, zwracany obiekt jest widokiem (view) na oryginalne dane, a nie ich kopią.

Podstawowa składnia wygląda następująco:

numpy.ravel(a, order='C')
  • a – wejściowa tablica NumPy.
  • order – określa kolejność spłaszczania:
    • 'C' – wierszowa (C-style, domyślnie).
    • 'F' – kolumnowa (Fortran-style).
    • 'A' – według pamięci (C- lub F-style, zależnie od układu danych).
    • 'K' – zgodnie z kolejnością w pamięci.

Podstawowy przykład numpy.ravel()

Przyjrzyjmy się prostemu przykładowi:

import numpy as np

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

print(flattened)

Wynik:

[1 2 3 4 5 6]

Różnice między numpy.ravel() a numpy.flatten()

Funkcja numpy.ravel() jest często mylona z numpy.flatten(). Główna różnica polega na tym, że:

  • numpy.ravel() zwraca widok, jeśli to możliwe (nie tworzy nowej kopii).
  • numpy.flatten() zawsze zwraca kopię tablicy.

Przykład ilustrujący różnicę:

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

ravel_view = arr.ravel()
flatten_copy = arr.flatten()

ravel_view[0] = 99  # Zmiana wartości w widoku

print(arr)  # Oryginalna tablica też się zmienia
print(flatten_copy)  # Kopia pozostaje bez zmian

Wynik:

[[99  2]
 [ 3  4]]
[1 2 3 4]

Spłaszczanie tablicy w różnych porządkach

Możemy określić sposób, w jaki tablica zostanie spłaszczona, np. wierszowo ('C') lub kolumnowo ('F'):

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

print(np.ravel(arr, order='C'))  # Wierszowo
print(np.ravel(arr, order='F'))  # Kolumnowo

Wynik:

[1 2 3 4]
[1 3 2 4]

Podsumowanie

Funkcja numpy.ravel() jest niezwykle użyteczna podczas pracy z danymi w NumPy. Jej główne zalety to:

  1. Szybkie przekształcenie tablicy wielowymiarowej do jednowymiarowej.
  2. Optymalizacja pamięci – zwraca widok, jeśli to możliwe.
  3. Możliwość określenia kolejności spłaszczania.

Jeśli zależy nam na utworzeniu niezależnej kopii tablicy, powinniśmy użyć numpy.flatten(). Jednak w większości przypadków numpy.ravel() będzie lepszym wyborem ze względu na wydajność.

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