Vyskúšajte si nasledujúce príkazy a vysvetlite ich chovanie:
import numpy as np
= np.linspace(0, 1, 10)
x = x**2 + x
y = y * x
z = np.pi * y[x > 0.3]
w = y[list(range(len(w)))]
z = np.sin(z)
z @ w.T z
Napíšte program, ktorý vykreslí funkciu:
\[ y(x) = \pi \sin(x^2) + \mathrm{e}^{-x^2} ~~\mathrm{\bf{if}}~~ x > 0 ~~\mathrm{\bf{else}}~~ \cos \left(\frac{x}{\lvert x^2 - 3 \rvert} \right), \]
v intervale \(x \in (-2, 2)\).
Skript, v ktorého môžete vychádzať (vykreslí jednoduchšiu funkciu):
import numpy as np
import matplotlib.pyplot as plt
= np.linspace(-32, 32, 10000)
x = np.sin(np.pi * x)
y
plt.plot(x, y)=True) plt.show(block
Obrázok je možné zapísať do 2D matice – každý prvok je intenzita pixela (v prípade farebného obrázku je 1 prvok RGB trojica). Zobraziť obrázok je možné pomocou funkcie matplotlib.pyplot.imshow
.
Napr.:
import matplotlib.pyplot as plt
import numpy as np
# 100x100 pixelov
= np.zeros((100, 100))
img
= 40
R for i in range(img.shape[0]):
for j in range(img.shape[1]):
= i**2 + j**2
r if r < R**2:
= r
img[i, j]
plt.imshow(img) plt.show()
Modifikujte program, tak aby vykreslil štvorec v strede obrázku.
Komplexné čísla sú v Pythone štandardný dátový typ. Komplexné číslo je možné vytvoriť rôznymi spôsobmi:
= 3j + 1
c = complex(real=1, imag=3)
c = complex(1, 3) c
Komplexné číslo má dve časti:
= 3j + 1
c == 3
c.imag == 1 c.real
a funkcia abs
na komplexné číslo funguje presne tak, ako v matematike:
abs(3j + 4) == 5
Táto úloha je zo stránky scipython.com. Využijeme komplexné čísla pre tvorbu fraktálu – konkrétne Juliovej množiny. Algoritmus pre Juliovu množinu je nasledujúci:
\[ \mathrm{Re}(z_0) \in (-1.5, 1.5) \qquad \qquad \mathrm{Imag}(z_0) \in (-1.5, 1.5) \]
Začnite so vstupnými parametrami:
Vašou odmenou by mal byť nádherný obrázok. Výpočet by mal trvať pár sekúnd.
V štúdijných materiáloch nájdete datový súbor s dvoma stĺpcami. Data som získal spojením dvoch datasetov z owid-datasets. (Majú na tie datasety veľmi peknú stránku.)
Prvý stĺpec je priemerný index šťastia – číslo od 0 do 10, druhý stĺpec je priemerná spotreba energie na osobu v jednotkách kcal/osoba/deň.
numpy.genfromtxt
(alebo inak, ale genfromtxt
je najjednoduchší spôsob.).K fitovaniu použite funkciu scipy.optimize.curve_fit
. Jej použitie je ukázané v nasledujúcom príklade:
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np
def model(x, a, b):
return a * x + b
= np.array([1, 2, 3, 4, 5])
x = np.array([2, 6, 4, 8, 10])
y
= curve_fit(model, x, y)
param_opt, param_covariance = np.sqrt(np.diag(param_covariance))
param_std_dev
= round(param_opt[0], 3)
a = round(param_opt[1], 3)
b
print("Fitted param 'a': {} +/- {}".format(
0]))
a, param_std_dev[print("Fitted param 'b': {} +/- {}".format(
1]))
b, param_std_dev[
='data')
plt.scatter(x, y, label
plt.plot(x, model(x, a, b),='black',
color=r'${} \cdot x + {}$'.format(a, b)
label
)
plt.legend() plt.show()