# Pomoćni sadržaj


# %% Biblioteke

import numpy as np


# %% Zadatak 1

matr = np.array([[1, 2, 6], [5, 4, 5], [7, 4, 3]])

print()
print("matr:")
print(matr)
print("zbir na glavnoj dijagonali", matr.diagonal().sum())


# %% Zadatak 2

gpsv = np.random.default_rng(7)

matrA = gpsv.integers(10, size=(3, 4))

matrB = gpsv.integers(10, size=(3, 4))

print()
print("matrA:")
print(matrA)
print("matrB:")
print(matrB)


# %% Zadatak 3

print()
print("aritmetička sredina za matrA:", np.mean(matrA).round(2))
print("aritmetička sredina po kolonama za matrA:")
print(np.mean(matrA, axis=0).round(2))
print("aritmetička sredina po vrstama za matrA:")
print(np.mean(matrA, axis=1).round(2))

print("aritmetička sredina za matrB:", np.mean(matrB).round(2))
print("aritmetička sredina po kolonama za matrB:")
print(np.mean(matrB, axis=0).round(2))
print("aritmetička sredina po vrstama za matrB:")
print(np.mean(matrB, axis=1).round(2))


# %% Zadatak 4

medA = np.median(matrA)

print()
print("medijana za matrA:", medA)
print("matrA:")
print(matrA)
print("pojavljivanje medijane kod matrA:")
print(medA == matrA)
print("koordinate pojavljivanja medijane kod matrA:")
print(np.argwhere(matrA == medA))


# %% Zadatak 5

print()
print("matrB:")
print(matrB)

print("sortirana verzija matrB 4x3")
print(np.sort(matrB, axis=None).reshape((4, 3)))
print("sortirana verzija matrB 4x3 u drugačijem redosledu popunjavanja")
print(np.sort(matrB, axis=None).reshape((4, 3), order="F"))


# %% Zadatak 6

print()
print("matrA:")
print(matrA)


def donja_granica(matr, dgran):
    matr[matr < dgran] = dgran
    return matr


gran = 3
print("postavljena donja granica:", gran)
print(donja_granica(matrA, gran))


# %% Zadatak 7

print()
print("matrB:")
print(matrB)


def pozicije_redosledno(matr):
    return np.argsort(matr, axis=None)


print("pozicije elemenata u poretku elemenata:")
print(pozicije_redosledno(matrB))


# %% Zadatak 8

print()
print("matrA:")
print(matrA)


def asred_opseg(matr, dgran, ggran, dec):
    return (
        np.extract(np.logical_and(matr >= dgran, matr <= ggran), 
                   matr).mean().round(dec)
    )


dgran = 4
ggran = 6
decm = 3
print("aritmetička sredina za elemente iz opsega od", dgran, "do", ggran)
print(asred_opseg(matrA, dgran, ggran, decm))

