Autor notebooka: Jakub Nowacki.
NumPy jest podstawowym pakie (dodatkowym) w Pythonie do obliczeń naukowych. Integruje on niskopoziomowe biblioteki takie jak BLAS i LAPACK lub ATLAS. Podstawowe właściwości NumPy to :
Numpy importujemy używając nazwy numpy
, najlepiej w całości jako pakiet. Często stosowany jest alias np
.
In [0]:
import numpy as np
In [3]:
n1 = np.array([1,2,3])
print(n1)
n2 = np.array([[1,2],[3,4]])
n2
# ... itd
Out[3]:
Każda komenda ma poniższe właściwości:
In [4]:
print('Wymiar: n1: {}, n2: {}'.format(n1.ndim, n2.ndim))
print('Kształt: n1: {}, n2: {}'.format(n1.shape, n2.shape))
print('Rozmiar: n1: {}, n2: {}'.format(n1.size, n2.size))
print('Typ: n1: {}, n2: {}'.format(n1.dtype, n2.dtype))
print('Rozmiar elementu (w bajtach): n1: {}, n2: {}'.format(n1.itemsize, n2.itemsize))
print('Wskaźnik do danych: n1: {}, n2: {}'.format(n1.data, n2.data))
W przeciwieństwie do kolekcji, tablice mogą mieć tylko jeden typ elementu, choć moze być złożony; zobacz ten link.
In [5]:
for v in [1, 1., 1j]:
a = np.array([v])
print('Tablica: {}, typ: {}'.format(a, a.dtype))
# Można też wymusić typ przy tworzeniu tablicy
a = np.array([1], dtype=str)
print('Tablica: {}, typ: {}'.format(a, a.dtype))
Są też ogólne metody tworzenia tablic o specyficznych właściwościach:
In [6]:
print('Zakres:\n{}'.format(np.arange(1,10)))
print('Zera:\n{}'.format(np.zeros((2,3))))
print('Jedynki:\n{}'.format(np.ones((3,2))))
print('Pusta:\n{}'.format(np.empty((2,7)))) # Bez inicjalizacji
print('Losowa:\n{}'.format(np.random.rand(2,2)))
Pobieranie wartości z tablic:
In [7]:
# Jak w kolekcjach
print(n1[1], n2[1][1])
# ... ale jest też skrót
print(n2[1,1])
# Przecięcia podobnie w kolekcjach
print(n2[1,:])
print(n2[:,1])
print(n2[1,:1])
Operacje w tablicach wykonywane są na poszczególnych elementach, np. jak pomnożymy dwie tablice pomnożone zostaną tylko elementy na tych samych pozycjach przez siebie.
In [8]:
a = np.random.randint(100,size=(2,3))
print('a = \n{}'.format(a))
print('2*a = \n{}'.format(2*a))
print('a**2 = \n{}'.format(a**2))
print('a*a = \n{}'.format(a*a))
In [9]:
m = np.matrix([[1,2], [3,4]])
mm = np.matrix([[5,6], [7,8]])
print('m*mm = \n{}'.format(m*mm))
print('m**2 = \n {}'.format(m**2))
print('m*2 = \n ={}'.format(m*2))
d = np.diag([3,4])
print('d = \n {}'.format(d))
print('d*m = \n {}'.format(d*m))
Niemniej, tablice można używać podobnie, ale do mnożenia trzeba wykorzystywać funkcje dot
:
In [10]:
a = np.array([[1,2], [3,4]])
aa = np.array([[5,6], [7,8]])
print('a*aa = \n{}'.format(a*aa))
print('a.dot(aa) = \n{}'.format(a.dot(aa)))
print('a**2 = \n {}'.format(a**2))
print('a*2 = \n ={}'.format(a*2))
Dodatkowo, operacje algebry liniowej można wykonywać zarówno na tablicach jak i macierzach, np:
In [ ]:
print('det(m) = {}'.format(np.linalg.det(m)))
print('det(a) = {}'.format(np.linalg.det(a)))
Mamy liczbę trzycyfrową. Jeżeli od liczny dziesiątek odejmiemy liczbę jedności otrzymamy 6. Jeżeli do liczby dziesiątek dodamy liczbę jedności otrzymamy 10.
Podpowiedź: $$ Ax=B $$ $$ x = A^{-1}B $$
In [36]:
"""
liczba_trzycyfrowa = 282
liczba_dziesiatek = 8
liczba_jednosci = 2
liczba_dziesiatek - liczba_jednosci = 6
liczba_dziesiatek + liczba_jednosci = 10
liczba_dziesiatek = liczba_jednosci + 6
liczba_dziesiatek + liczba_jednosci = 10
liczba_dziesiatek = liczba_jednosci + 6
(liczba_jednosci + 6) + liczba_jednosci 10
liczba_dziesiatek = liczba_jednosci + 6
2 * liczba_jednosci + 6 = 10
liczba_dziesiatek = liczba_jednosci + 6
liczba_jednosci = 8 / 2
liczba_dziesiatek = 2 + 6
liczba_jednosci = 2
liczba_dziesiatek = 8
liczba_jednosci = 2
x1 - x2 = 6
x1 + x2 = 10
x1 = 6 + x2
6 + x2 + x2 = 10
2 * x2 = 4
x2 = 2
x1 = 8
"""
import numpy as np
A = np.matrix([[1, -1], [1, 1]])
# matrix([[ 1, -1],
# [ 1, 1]])
B = np.matrix([6, 10]).T # Transpose matrix
# matrix([[ 6],
# [10]])
x = A**(-1) * B
# matrix([[8.],
# [2.]])
A*x == B
# matrix([[ True],
# [ True]])
res1 = np.arange(1, 10)*100 + 10*x[0,0] + 1*x[1,0]
# array([182., 282., 382., 482., 582., 682., 782., 882., 982.])
res1[res1 % 3 == 0]
# array([282., 582., 882.])
m = res1 % 3 == 0
# array([False, True, False, False, True, False, False, True, False])
res1[m]
# array([282., 582., 882.])
res2 = res1[m]
In [ ]: