Naloge - numpy
Namig: vse naloge so elegantno rešljive v eni vrstici.
Tabela iz seznama
Napišite funkcijo seznam_tabela(vrednosti, visina, sirina)
, ki sprejme seznam števil vrednosti
in vrne numpy tabelo z visina
vrsticami in sirina
stolpci, ki ima po vrsti (od zgoraj navzdol, znotraj vrstice pa od leve proti desni) vnešene vrednosti iz podanega seznama.
>>> seznam_tabela([1,2,3,2,1,0], 2, 3)
array([[1, 2, 3],
[2, 1, 0]])
Rešitev
```python def seznam_tabela(vrednosti, visina, sirina): return np.array(vrednosti).reshape((visina, sirina)) ```Velika števila
Napišite funkcijo velika_stevila(n, x)
, ki vrne numpy tabelo dolžine n
, ki ima vse vrednosti enake x
. Vrnjena tabela naj bo primernega tipa, da bo podpirala operacije s 64-bitnimi celimi števili.
>>> sum(velika_stevila(3, 1000000000) + velika_stevila(3, 2000000000))
9000000000
Rešitev
```python def velika_stevila(n, x): return np.full(n, x, dtype=np.int64) ```Povprečnost
Napišite funkcijo odmik_od_povprecja(a)
, ki sprejme numpy tabelo a
poljubnih dimenzij in vrne tabelo enakih dimenzij, ki na vsakem mestu vsebuje odmik pripadajoče vrednosti od povprečja vseh vrednosti v tabeli.
>>> a = np.array([[1,2,3],[4,5,6]])
>>> odmik_od_povprecja(a)
array([[-2.5, -1.5, -0.5],
[ 0.5, 1.5, 2.5]])
Rešitev
```python def odmik_od_povprecja(a): return a - np.mean(a) ```Stroški
Napišite funkcijo stroski(a)
, ki sprejme 2D numpy tabelo a
. Vsaka vrstica tabele opisuje posamezen projekt, vsak stolpec pa ustreza nekemu tipu stroškov (npr. plače, materialni stroški, ...). Funkcija naj vrne indeks stolpca oz. tipa stroškov, ki je preko vseh projektov skupaj največ prispeval k stroškom podjetja. Z drugimi besedami, poišče stolpec z največjo vsoto.
>>> a = np.array([1, 2, 4, 0],
[3, 1, 1, 2],
[0, 1, 2, 1])
>>> stroski(a)
2
Rešitev
```python def stroski(a): return a.sum(axis=0).argmax() ```Temperature
Napišite funkcijo enake_meritve(casi, temp1, temp2)
. Kot prvi argument casi
sprejme navaden seznam časov meritev. Drugi in tretji argument pa sta numpy tabeli izmerjenih temperatur v dveh različnih krajih. Vsi argumenti so enake dolžine. Funkcija naj vrne numpy tabelo časov, ob katerih je bila izmerjena enaka temperatura v obeh krajih.
>>> casi = [9, 10, 12, 15, 16, 17, 18]
>>> kraj1 = np.array([20, 22, 23, 20, 19, 21, 25])
>>> kraj2 = np.array([20, 18, 23, 20, 22, 20, 25])
>>> enake_meritve(casi, kraj1, kraj2)
array([ 9, 12, 15, 18])
Rešitev
```python def enake_meritve(casi, temp1, temp2): return np.array(casi)[temp1 == temp2] ```Brez negativnih
Napišite funkcijo brez_negativnih(a)
, ki sprejme 2D numpy tabelo a
in vrne novo tabelo brez vrstic in stolpcev, ki vsebujejo kakšno negativno vrednost. V spodnjem primeru odstrani prvo in tretjo vrstico ter prvi, tretji in peti stolpec; ne ostane prav dosti.
>>> a = np.array([[1, 0, -3, 3, -4],
[1, 2, 5, 1, 8],
[-2, 3, 1, 4, 5],
[6, 2, 1, 7, 0]])
>>> brez_negativnih(a)
array([[2, 1],
[2, 7]])
Rešitev
```python def brez_negativnih(a): return a[a.min(axis=1) >= 0, :][:, a.min(axis=0) >= 0] ```Večkotnik
Napišite funkcijo veckotnik(a)
, ki izračuna in vrne obseg večkotnika. Sprejme 2D numpy tabelo a
, ki podaja koordinate vozlišč večkotnika, kot si sledijo po vrsti (povezana sta tudi prvo in zadnje vozlišče).
>>> a = np.array([[-2,1], [0,-1], [1,0], [1,2], [-1,2]])
>>> veckotnik(a)
9.65685425