Biblioteka NumPy, w Python, została stworzona, aby umożliwić szybkie i sprawne operacje na macierzach. Każdy element jest tego samego typu – zazwyczaj są to liczby. Na jej podstawie stworzono, między innymi bibliotekę Pandas. Jest to jedna z pierwszych bibliotek, z którymi chcemy się zaznajomić, pracując przy analizie danych oraz sztucznej inteligencji. Zobaczmy, jakie możliwości ma do zaoferowania i jak jej użyć. Zaczynajmy!

Dlaczego NumPy? Bo jest szybkie. Bardzo szybkie. O wiele szybsze, niż gdybyśmy chcieli te same operacje wykonać za pomocą list czy też pętli. Z drugiej strony jest proste. To razem czyni ją bardzo praktyczną, dla każdej osoby, która pracuje z liczbami.

Poniżej:

  • Instalacja oraz import NumPy
  • ndarray – podstawowy typ danych
  • Tworzenie tablicy
  • Operacje na tablicy
  • Przeglądanie tablic w NumPy
  • Zabawa obrazem
  • Detekcja ognia
  • Funkcje wbudowane

Wszystkie przedstawione poniżej kody źródłowe, znajdują się w Jupyter Notebook, w repozytorium GitHub:

https://github.com/AnalitykEduPL/Najwazniejsze-biblioteki-Python.git

Instalacja oraz import NumPy

Jeżeli mamy zainstalowany pakiet Anaconda, z Jupyter Notebook, NumPy już w nim jest. W innym przypadku, instalujemy za pomocą komendy pip:

$ pip install numpy

oraz importujemy ją do swojego programu za pomocą

import numpy as np

Zwyczajowo, przyjęło się nazywać ją ‚np’.

ndarray – podstawowy typ danych

Podstawowym typem danych, który otrzymujemy wraz z NumPy jest ndarray, czyli N-dimmentional array, czyli lista/tablica wielowymiarowa. Często w skrócie mówi się na to tablica, jednak nie można mylić z domyślą listą / tablicą w Python, która jest jedno wymiarowa.

Tworzenie tablicy w NumPy

Tablice jedno-wymiarowe

Podstawowe komendy, którymi tworzymy tablice to

  • np.array(), w której podajemy wartości,
  • np.arange(), w której podajemy zakres jakim, chcemy uzupełnić tablice,oraz odstęp liczbowy między nimi,
  • oraz bardzo użyteczna funkcja w przypadku tworzenia wykresów – np.linspace(), gdzie podajmy zakres liczbowy, oraz na ile liczb chcemy go podzielić:
a = np.array([1,3,5,7])
# array([1, 3, 5, 7])

b = np.arange(4)
# array([0, 1, 2, 3])

np.arange(2,10,1)
# array([2, 3, 4, 5, 6, 7, 8, 9])

np.linspace(0,10,6)
# array([ 0.,  2.,  4.,  6.,  8., 10.])

Tworzenie tablicy wielo-wymiarowej

Tworzenie tablicy wielowymiarowej, jest równie proste.

  • Możemy zdefiniować ją ręcznie, za pomocą np.array()
  • Ale również, wykorzystać kolejną użyteczną funkcję, w celu uzupełnienia jej zerami – np.zeros()
  • Lub jedynkami np.ones()
  • Albo wartościami losowymi np.random.random()
c = np.array([[1,2,3],[4,5,6]])
# array([[1, 2, 3],
       [4, 5, 6]])

d = np.zeros((2,3))
# array([[0., 0., 0.],
       [0., 0., 0.]])

d = np.ones((2,3))
# array([[1., 1., 1.],
       [1., 1., 1.]])

np.random.random((2,3))
# array([[0.16868203, 0.31090109, 0.7210469 ],
       [0.0750029 , 0.08401428, 0.96992496]])

Podstawowe operacje na tablicach

Na tablicach w NumPy, możemy wykonywać wszystkie podstawowe operacje matematyczne, takie jak dodawanie, odejmowanie, mnożenie itd

Dodatkowo, mamy do dyspozycji użyteczne funkcje, sprawdzające jej rozmiar – shape, transponujące – T.

Możemy również, w łatwy sposób, sprawdzać wartości poszczególnych elementów i tworzyć maski.

Zobaczmy teraz to na żywym przykładnie, wykorzystując, wcześniej utworzone tablice:

a+b
# array([ 1,  4,  7, 10])

c+d
# array([[2., 3., 4.],
       [5., 6., 7.]])

c**2
# array([[ 1,  4,  9],
       [16, 25, 36]])

c.shape
# (2, 3)

c.T
# array([[1, 4],
       [2, 5],
       [3, 6]])

c > 3
# array([[False, False, False],
       [ True,  True,  True]])

Przeglądanie tablic w NumPy

Indeksowanie oraz przeglądanie tablic, jest bardzo podobne do standardowych list w Python.

a[2:]
# array([5, 7])

c[:1]
# array([[1, 2, 3]])

c[:1,1:]
# array([[2, 3]])

for x in c:
    print (i)
    for y in x:
        print(y)
# [4 5 6]
1
2
3
[4 5 6]
4
5
6

for x in c.flat:
    print(x)
# 1
2
3
4
5
6

[x for x in c if x[1] < 3]
# [array([1, 2, 3])]

Przetwarzane obrazu w NumPy

Obraz to nic innego, jak tablica, którą możemy wczytać do ndarray i nią manipulować. Jest wiele bibliotek, które umożliwią nam wczytanie zdjęcia. Bardzo popularną jest skimage.

Na początku należy ją zainstalować:

$ pip install scikit-image

A następnie, zaimportować do naszego programu, za pomocą import.

from skimage import io
pic = np.array(io.imread('http://analityk.edu.pl/wp-content/uploads/2020/01/fire.jpeg'))

Tak jak widzimy, użyliśmy do tego celu funkcji imread, po czym zamieniliśmy typ danych na ndarray. Plik jest dostępny publicznie, tak więc każdy może powtórzyć powyższe komendy.

Następnie, możemy wyświetlić ten obraz, z pomocą biblioteki matplotlib:

import matplotlib.pyplot as plt
plt.imshow(pic)
plt.show()

Dokonajmy kilku zmian. Na początku, odwróćmy obraz:

plt.imshow(pic[::-1])
plt.show()

Odbicie lustrzane:

plt.imshow(pic[:,::-1])
plt.show()

Zbliżenie:

plt.imshow(pic[300:450,150:600])
plt.show()

Popsujmy trochę kolory:

plt.imshow(pic+100)
plt.show()

A na końcu, gwóźdź programu – wyodrębnijmy ogień. Każdy kolor jest zapisany w systemie RGB, gdzie R odpowiada za natężenie koloru czerwonego od 0 do 255. Możemy w prosty sposób, wszędzie tam, gdzie natężenie koloru czerwonego, jest mniejsze od 200, wstawić wartość, odpowiadającą kolorowi białemu – RGB [255,255,255], i tym samym, ‚zostawić’ tylko ogień:

pic = np.array(io.imread('http://analityk.edu.pl/wp-content/uploads/2020/01/fire.jpeg'))
mask = pic[:,:,0] < 200
pic[mask] = 255
plt.imshow(pic)
plt.show()

Funkcje wbudowane

Dużym ułatwieniem, jest zestaw funkcji wbudowanych, które znajdziemy w NumPy:

x = np.random.random((3,5))
x
# array([[0.43391468, 0.73430824, 0.92759808, 0.23966575, 0.16112573],
#       [0.85501039, 0.67383523, 0.45245038, 0.26001489, 0.86884395],
#       [0.17991555, 0.96628615, 0.22680872, 0.92979024, 0.52796391]])

print(x.sum())
print(x.min())
print(x.max())
print(x.mean())
# 8.437531894577779
# 0.1611257283125176
# 0.9662861490415007
# 0.5625021263051853

Podsumowując. NumPy to prosta, lecz potężna biblioteka do operacji na tablicach. Jak się okazuje, obraz to nic innego jak tablica, którą możemy o przetwarzać za pomocą tej biblioteki.

Nawet omijając kwestie manipulacji obrazem, NumPy jest absolutnie numer 1, bibliotek dla analityków danych, z którą trzeba się zaznajomić. Jednak, matematykiem być nie trzeba, a opanowanie podstawowych funkcji leży w zakresie możliwości każdego.