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

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

Funkcja numpy.where() to jedno z najbardziej przydatnych narzędzi dostępnych w bibliotece NumPy. Pozwala na szybkie wyszukiwanie i zastępowanie wartości w tablicach. W tym artykule pokażę, jak działa numpy where w języku Python oraz przedstawię konkretne przykłady zastosowania.

Co to jest numpy.where()?

Funkcja numpy.where() umożliwia zwracanie indeksów elementów spełniających określony warunek lub modyfikowanie wartości w tablicy NumPy w zależności od warunku logicznego.

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

numpy.where(condition, [x, y])
  • condition – warunek logiczny, który określa, które wartości mają być wybrane.
  • x (opcjonalne) – wartości używane, gdy warunek jest spełniony.
  • y (opcjonalne) – wartości używane, gdy warunek nie jest spełniony.

Jeśli podamy tylko condition, funkcja zwróci indeksy elementów spełniających warunek.

Zwracanie indeksów spełniających warunek

Jeśli użyję numpy.where() w wersji z jednym argumentem – warunkiem logicznym – otrzymam indeksy elementów spełniających dany warunek.

import numpy as np

arr = np.array([10, 20, 30, 40, 50])
indices = np.where(arr > 25)

print(indices)  # (array([2, 3, 4]),)

Funkcja zwróciła krotkę z tablicą indeksów elementów większych od 25.

Podstawowe zastosowanie – zamiana wartości

Gdy podam dodatkowo wartości x i y, mogę dynamicznie podmieniać elementy tablicy.

arr = np.array([10, 20, 30, 40, 50])
modified_arr = np.where(arr > 25, 1, 0)

print(modified_arr)  # [0 0 1 1 1]

W tym przykładzie liczby większe niż 25 zostały zastąpione jedynkami, a reszta zerami.

Zastosowanie w macierzach wielowymiarowych

numpy.where() działa również na macierzach wielowymiarowych.

matrix = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
indices = np.where(matrix > 4)

print(indices)

Wynik to dwie tablice z indeksami wierszy i kolumn:

(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))

Oznacza to, że elementy spełniające warunek znajdują się na pozycjach (1,1), (1,2), (2,0), (2,1) i (2,2).

Warunki bardziej złożone

Mogę tworzyć bardziej skomplikowane warunki, łącząc operatory logiczne.

arr = np.array([10, 20, 30, 40, 50])
modified_arr = np.where((arr > 15) & (arr < 45), arr, -1)

print(modified_arr)  # [-1 20 30 40 -1]

Tutaj zamieniłem wartości spoza zakresu (15,45) na -1.

Porównanie numpy.where() z list comprehensions

Wiele osób zastanawia się, dlaczego warto używać numpy.where() zamiast standardowego zapisu w Pythonie. Spójrzmy na porównanie:

Metoda Przykład Wydajność
List comprehension
[1 if x > 25 else 0 for x in arr]
Wolniejsze
numpy.where()
np.where(arr > 25, 1, 0)
Szybsze

Operacje na tablicach NumPy są optymalizowane w C, dzięki czemu numpy.where() działa znacznie szybciej.

Podsumowanie

Funkcja numpy.where() to potężne narzędzie do analizy i modyfikacji danych w tablicach NumPy. Pozwala na:

  • Znajdowanie indeksów spełniających dany warunek.
  • Warunkową zamianę wartości.
  • Efektywne operacje na dużych tablicach.
  • Obsługę macierzy wielowymiarowych.

Zastosowanie numpy.where() w praktyce znacząco poprawia wydajność kodu i jest nieocenione przy przetwarzaniu dużych zbiorów danych.

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