Python 3.7.3

Przykładowe zadania i rozwiązania, poradniki w języku Python 3.7.3!

Nie jesteś zalogowany na forum.

#1 2019-06-12 23:27:53

SpeX
Administrator
Dołączył: 2019-06-11
Liczba postów: 8
WindowsChrome 74.0.3729.169

Ćwiczenia nr 1 - Numpy

# Zadanie 1 Za pomocą funkcji arange stwórz tablicę Numpy składającą się 20 kolejnych wielokrotności liczby 2.

def zad1():
    return np.arange(2,20*2+1,2)
print(zad1())

# Zadanie 2Stwórz listę składającą się z wartości zmiennoprzecinkowych a następnie zapisz do innej zmiennej jej kopięprzekonwertowaną na typ int64.

def zad2():
    tab_float = np.arange(1,10, 0.2)
    tab_int = tab_float.astype('int64')
    print(tab_float)
    print(tab_int)
print(zad2())

# Zadanie 3
Napisz funkcję, która będzie:
- przyjmowała jeden parametr ‘n’ w postaci liczby całkowitej
- zwracała tablicę Numpy o wymiarach n*n kolejnych liczb całkowitych poczynając od 1

def zad3(n):
    return np.arange(1,n*n+1).reshape((n,n))
print(zad3(5))

# Zadanie 4 Napisz funkcję, która będzie przyjmowała 2 parametry: liczbę, która będzie podstawą operacji potęgowania oraz ilość kolejnych potęg do wygenerowania. Korzystając z funkcji logspace generuj tablicę jednowymiarową kolejnych potęg podanej liczby,
np. generuj(2,4) -> [2 4 8 16]

def zad4(n, base):
    return np.logspace(1, n, num=n, base=base)
print(zad4(4, 2))

# Zadanie 5
Napisz funkcję, która:
- na wejściu przyjmuje jeden parametr określający długość wektora,
- na podstawie parametru generuje wektor, ale w kolejności odwróconej (czyli np. dla n=3 =>[3 2 1])
- generuje macierz diagonalną z w/w wektorem jako przekątną

def zad5(n):
    return np.diag(range(n, 0, -1))
print(zad5(4))

# Zadanie 6 Stwórz skrypt który na wyjściu wyświetli macierz numpy (tablica wielowymiarowa) w postaci wykreślanki, gdzie
jedno słowo będzie wypisane w kolumnie, jedno w wierszu i jedno po ukosie. Jedno z tych słów powinno być wypisane od prawej do lewej.

def zad6():
    # wyrazy jako wektory znakĂłw (liter)
    malina = np.array(list('malina'))
    lizak = np.array(list('lizak'))
    jagoda = np.array(list('jagoda'))

    # przygotowanie "pustej" tablicy 6x6 wypełnionej pustym stringiem
    wykreslanka = np.zeros((6, 6), dtype=str)
    # lub
    wykreslanka = np.empty((6, 6), dtype='str')
    # lub tak
    # wykreslanka = np.full((6,6),"",dtype='str')
    # można też bardziej "na piechotę"

    # teraz np. za pomocą wycinków (slice) możemy nie tylko zwracać
    # określone fragmenty macierzy, ale wstawiać tam wartości
    # należy pamiętać, że rozmiar wycinka musi być taki sam jak
    # rozmiar danych, które chcemy tam umieścić
    wykreslanka[:, 0] = malina
    wykreslanka[2,:5] = lizak
    wykreslanka[5,::-1] = jagoda
    # za pomocą np.put możemy również wstawiać dane do macierzy określając zbiór indeksów
    # na których odpowiadające wartości stawianego wektora mają się znaleźć
    # ale tutaj numeracja indeksĂłw jest "globalna" gdzie indeks 0 to wiersz 0 i kolumna 0
    # a kolejne numery są naliczane do prawej strony np.
    # 0  1  2  3
    # 4  5  6  7
    # 8  9 10 11 itd.
    # np.put(wykreslanka, [ 0, 6, 12, 18, 24, 30 ], wyraz1)
    # np.put(wykreslanka, range(12, 17), wyraz2)
    print(wykreslanka)
print(zad6())

# Zadanie 7
Napisz funkcję, która wygeneruje macierz wielowymiarową postaci:
[[2 4 6]
[4 2 4]
[6 4 2]]
Przy założeniach:
- funkcja przyjmuje parametr n, który określa wymiary macierzy jako n*n i umieszcza wielokrotność liczby 2 na
kolejnych jej przekątnych rozchodzących się od głównej przekątnej.

def zad7(n):
    mat = np.diag([2 for _ in range(n)])
    for indeks in range(1, n):
        vec = [2+(2*indeks) for _ in range(n-indeks)]
        mat += np.diag(vec, indeks)
        mat += np.diag(vec, -indeks)
    print(mat)
print(zad7(5))

# Zadanie 8 Napisz funkcję, która:
- jako parametr wejściowy będzie przyjmowała tablicę wielowymiarową numpy oraz parametr ‘kierunek’,
- parametr kierunek określa czy tablica wejściowa będzie dzielona w pionie czy poziomie
- funkcja dzieli tablicę wejściową na pół (napisz warunek, który wyświetli komunikat, że ilość wierszy lub
kolumn, w zależności od kierunku podziału, nie pozwala na operację)

def zad8(tab, kierunek='poziomo'):
    if kierunek == 'poziomo':
        # nieparzysta liczba wierszy
        if tab.shape[0] % 2 != 0:
            print("Tablica posiada nieprzystą liczbę wierszy")
            return
        p1 = tab[0:int(tab.shape[0]/2), :]
        p2 = tab[int(tab.shape[0]/2):, :]
        print("***** część 1 *****")
        print(p1)
        print("***** część 2 *****")
        print(p2)
    elif kierunek == "pionowo":
        if tab.shape[1] % 2 != 0:
            print("Tablica posiada nieprzystą liczbę wierszy")
            return
        p1 = tab[:, 0:int(tab.shape[1]/2)]
        p2 = tab[:, int(tab.shape[0] / 2):]
        print("***** część 1 *****")
        print(p1)
        print("***** część 2 *****")
        print(p2)
print(zad8(np.arange(36).reshape((6,6))))
print(zad8(np.arange(36).reshape((6,6)), kierunek='pionowo'))

# Zadanie 9 Wykorzystaj poznane na zajęciach funkcje biblioteki Numpy i stwórz macierz 5x5, która będzie zawierała
kolejne wartości ciągu Fibonacciego.

def zad9(n):
    # funkcja wewnętrzna
    def fibo(n):
        if n == 0:
            return []
        elif n == 1:
            return [1]
        elif n == 2:
            return [1, 1]
        else:
            fibos = [1, 1]
            for indeks in range(n-2):
                fibos.append(fibos[-1] + fibos[-2])
            return fibos
    # print(fibo(n))
    # teraz Numpy array
    import math as m
    shape = int(m.sqrt(n))
    return np.array(fibo(n)).reshape((shape, shape))
print(zad9(25))

Offline

Użytkowników czytających ten temat: 0, gości: 1
[Bot] ClaudeBot