Matice je možné reprezentovať zoznamami:
= [[1, 2], [3, 4]]
a = [[0, 1], [1, 0]] b
\[\begin{gather} \mathbf{A}: \quad m \times n \qquad\qquad \mathbf{B}: \quad n \times p \qquad\qquad c_{ij} = \sum_{k = 0}^{n-1} a_{ik} b_{kj} \end{gather}\]
def naive_matmul(a, b):
= []
res for i in range(len(a)):
= []
new_row
res.append(new_row)for j in range(len(b[0])):
= 0
val for k in range(len(a[0])):
+= a[i][k] * b[k][j]
val
new_row.append(val)return res
= naive_matmul(a, b) c
numpy
Knižnica na základné numerické výpočty, to znamená:
numpy
import numpy as np
= [1.0, 2.0, 3.0, 4.0]
python_list = np.array(python_list)
numpy_array
print(3 * numpy_array)
print(numpy_array / 3)
print(numpy_array**3)
print(np.linalg.norm(numpy_array))
print(numpy_array * numpy_array)
# Toto je TypeError:
print(python_list / 3)
numpy
import numpy as np
= np.array([[1, 2], [3, 4]])
a = np.array([[0, 1], [1, 0]])
b
= a @ b
c # alebo
= np.matmul(a, b) c
Maticové násobenie nie je to isté čo normálne násobenie:
= a * b # nasobi po prvkoch c
= np.array([[1, 2], [3, 4]])
a for i in a:
print(i)
for i in range(a.shape[0]):
for j in range(a.shape[1]):
print(a[i][j])
= np.array([[1, 2], [3, 4]])
a 0] # -> array([1, 2])
a[0][1] # -> 1
a[
0][1] = 32
a[
0,1] # -> 1
a[1] # -> array([2, 4])
a[:,1] = 32
a[:,1] = [2, 4]
a[:,
> 2] += 10
a[a
= np.array([1,2,3,4])
b 1,2]] b[[
= np.array([0.1, 0.5, 2.0])
x
print("sin", np.sin(x))
print("sqrt", np.sqrt(x))
print("exp", np.exp(x))
print("rad2deg", np.rad2deg(x))
print("sum", np.sum(x))
print("cumsum", np.cumsum(x))
print("cumprod", np.cumprod(x))
print("diff", np.diff(x))
a veľa iných.
# 3.141...
np.pi # 2.718... np.e
np.inf0) == -np.inf
np.log(
0.1**np.inf == 0
1.1**np.inf == np.inf
NaN nie je číslo:
-1) == np.nan
np.log(
+ 1 # -> np.nan
np.nan > 1 # -> False
np.nan < 1 # -> False
np.nan == np.nan # -> False np.nan
Knižnica numpy obsahuje hlavne funkcie (metódy moc nie):
numpy.zeros
, numpy.ones
, numpy.linspace
, inénumpy.concatenate
, numpy.reshape
, inénumpy.dot
, numpy.cross
numpy.mean
, numpy.std
, inénumpy.transpose
alebo jednoducho a.T
(a
je nejaký numpy.array
).Existuje príliš veľa funkcií v numpy, aby ste si všetko zapamätali – použite internetový vyhľadávač, napr.:
“numpy how to solve linear system”
numpy.array
vs list
dtype
a shape
Z predchádzajúceho obrázku plynú dve implikácie.
= np.array([1, 2])
a print(a.dtype) # int64
= np.array([1, 2.0]) # vsimnite si desatinnej bodky
a print(a.dtype) # float64
= np.array([[1, 2], [3, 4]])
a print("2x2", a)
= (4, 1)
a.shape print("4x1", a)
= (4,)
a.shape print("vektor", a)
= (2, 2, 1)
a.shape print("3D: 2x2x1", a)
Pravedepodobne najpokročilejšia knižnica na vizualizáciu dát je matplotlib.
Pozrite sa na príklady.
import matplotlib.pyplot as plt
import numpy as np # ale plot funguje aj na zoznam
= np.linspace(0, 1, 10)
x = x, x**2, x**3, x**4
y, y2, y3, y4
=r'$y = x$') # popis s TeXom
plt.plot(x, y, label='k',label=r'$y = x^2$') # farba
plt.plot(x, y2, color=r'$y = x^3$') # body
plt.scatter(x, y3, label'o-') # styl
plt.plot(x, y4,
plt.legend()r'$x = \int_0^1 \rm{d} x$')
plt.xlabel(r'$y = x^p$')
plt.ylabel('The peculiar behaviour of polynomials')
plt.title('polynomials.png') # uloz do suboru
plt.savefig(# otvor okno z obrazkom plt.show()
Zložitejšie numerické algoritmy sú v scipy
. Pre ich správne použitie by ste mali pozorne čítať dokumentáciu, alebo zapísať si predmet na numerické metódy.
numpy
(štatistika, lin. alg., FFT)Ak poznáte wolframalpha.com, tak sympy
je podobný nástroj.
Príklad zo stránky sympy – analytické riešenie obyč. dif. rovnice:
from sympy import Function, dsolve
from sympy import Eq, Derivative
from sympy import sin, cos, symbols
from sympy.abc import x
= Function('y')(x)
y
= Derivative(y, x)
dy_dx = Derivative(dy_dx, x)
d2y_dx2 = d2y_dx2 + 9*y
eq
print(dsolve(eq, y))
# -> Eq(y(x), C1*sin(3*x) + C2*cos(3*x))