1. Mathematics

1.1. Builtin

  • abs()

  • round()

  • pow()

1.2. math

1.2.1. Constants

import math


math.pi
math.e

1.2.2. Degree/Radians Conversion

import math


math.degrees(x)
math.radians(x)

1.2.3. Rounding to lower

import math


math.floor(3.14)                # 3
math.floor(3.00000000000000)    # 3
math.floor(3.00000000000001)    # 3
math.floor(3.99999999999999)    # 3

1.2.4. Rounding to higher

import math


math.ceil(3.14)                 # 4
math.ceil(3.00000000000000)     # 3
math.ceil(3.00000000000001)     # 4
math.ceil(3.99999999999999)     # 4

1.2.5. Logarithms

import math


math.log(x)     # if base is not set, then ``e``
math.log(x, base=2)
math.log10()

math.exp(x)

1.2.6. Linear Algebra

import math


math.sqrt()
math.pow(x, y)

# Return the Euclidean distance, sqrt(x*x + y*y).
math.hypot(x, y)

1.2.7. Trigonometry

import math


math.sin()
math.cos()
math.tan()

math.sinh()
math.cosh()
math.tanh()

math.asin(x)
math.acos(x)
math.atan(x)
math.atan2(x)

math.asinh(x)
math.acosh(x)

1.2.8. Other functions

import math


math.isinf(x)
math.fabs(x)

1.3. Assignments

1.3.1. Euclidean distance 2D

  • Filename: math_euclidean_2d.py

  • Lines of code to write: 5 lines

  • Estimated time of completion: 15 min

  • Input data: Code Listing 1.4.

  1. Dane są dwa punkty A i B o podanych koordynatach tuple

  2. Punkty A i B są dwuwymiarowe (x, y)

  3. Oblicz odległość między nimi

  4. Wykorzystaj algorytm Euklidesa

  5. Funkcja musi przechodzić doctest Code Listing 1.4.

Code Listing 1.4. Euclidean distance 2D
def euclidean_distance(A, B):
    """
    >>> A = (1, 0)
    >>> B = (0, 1)
    >>> euclidean_distance(A, B)
    1.4142135623730951

    >>> euclidean_distance((0,0), (1,0))
    1.0

    >>> euclidean_distance((0,0), (1,1))
    1.4142135623730951

    >>> euclidean_distance((0,1), (1,1))
    1.0

    >>> euclidean_distance((0,10), (1,1))
    9.055385138137417
    """
    x1 = ...
    y1 = ...
    x2 = ...
    y2 = ...
    return ...
../_images/k-nearest-neighbors-euclidean-distance1.png

Fig. 1.1. Wyliczanie odległości w celu oszacowania przynależności do zbioru. Zwróć uwagę, że bez względu na ilość wymiarów wzór się niewiele różni.

1.3.2. Euclidean distance n dimensions

  • Filename: math_euclidean_multi_dim.py

  • Lines of code to write: 10 lines

  • Estimated time of completion: 15 min

  • Input data: Code Listing 1.5.

  1. Dane są dwa punkty A i B o podanych koordynatach tuple

  2. Punkty A i B są na N-wymiarowej przestrzeni (x, y, ...)

  3. Punkty A i B muszą być równo-wymiarowe

  4. Funkcja musi przechodzić doctest Code Listing 1.5.

Code Listing 1.5. Euclidean distance N-dimension
def euclidean_distance(A, B):
    """
    >>> A = (0,1,0,1)
    >>> B = (1,1,0,0)
    >>> euclidean_distance(A, B)
    1.4142135623730951

    >>> euclidean_distance((0,0,0), (0,0,0))
    0.0

    >>> euclidean_distance((0,0,0), (1,1,1))
    1.7320508075688772

    >>> euclidean_distance((0,1,0,1), (1,1,0,0))
    1.4142135623730951

    >>> euclidean_distance((0,0,1,0,1), (1,1,0,0,1))
    1.7320508075688772

    >>> euclidean_distance((0,0,1,0,1), (1,1))
    Traceback (most recent call last):
        ...
    ValueError: Punkty muszą być w przestrzeni tylu-samo wymiarowej
    """
    x1 = ...
    y1 = ...
    x2 = ...
    y2 = ...
    return ...

1.3.3. Matrix multiplication

  • Filename: math_matrix_multiplication.py

  • Lines of code to write: 6 lines

  • Estimated time of completion: 20 min

  1. Napisz program mnożący macierze wykorzystując zagnieżdżone pętle for

A = [
    [1, 0],
    [0, 1]
]
def matrix_multiplication(A, B):
    """
    >>> A = [[1, 0], [0, 1]]
    >>> B = [[4, 1], [2, 2]]
    >>> matrix_multiplication(A, B)
    [[4, 1], [2, 2]]

    >>> A = [[1,0,1,0], [0,1,1,0], [3,2,1,0], [4,1,2,0]]
    >>> B = [[4,1], [2,2], [5,1], [2,3]]
    >>> matrix_multiplication(A, B)
    [[9, 2], [7, 3], [21, 8], [28, 8]]
    """
    return
Hints
  • macierz zerowa

  • trzy pętle

1.3.4. Trigonometry

  • Filename: math_trigonometry.py

  • Lines of code to write: 10 lines

  • Estimated time of completion: 10 min

  1. Program wczytuje od użytkownika wielkość kąta w stopniach

  2. Użytkownik zawsze podaje int albo float

  3. Wyświetl wartość funkcji trygonometrycznych (sin, cos, tg, ctg)

  4. Jeżeli funkcja trygonometryczna nie istnieje dla danego kąta wypisz “For this angle function does not exist.” i zakończ program

1.3.5. Random numbers

  • Filename: math_random_numbers.py

  • Lines of code to write: 5 lines

  • Estimated time of completion: 10 min

  1. Napisz program, który wyświetli 6 losowych i nie powtarzających się liczb z zakresu od 1 do 49.

  2. Czym sa liczby pseudolosowe?

  3. Czy da się stworzyć program czysto losowy?

  4. Dlaczego?

Hints
  • random.randrange()

  • random.sample()

  • Czytelny cod obu przykładów wraz z białymi liniami nie powinien zająć więcej niż 10 linii.

The whys and wherefores
  • Umiejętność wykorzystania gotowych funkcji w zewnętrznej bibliotece

  • Umiejętność wyszukania informacji na temat API funkcji w dokumentacji języka i jego odpowiedniej wersji

  • Stworzenie dwóch alternatywnych podejść do rozwiązania zadania

  • Porównanie czytelności obu rozwiązań

  • Umiejętność sprawdzania czy coś znajduje się w liście oraz continue

1.3.6. Triangle

  • Filename: math_triangle.py

  • Lines of code to write: 5 lines

  • Estimated time of completion: 10 min

  1. Napisz program, który obliczy pole trójkąta.

  2. Użytkownik poda wysokość i długość podstawy tego trójkąta. Uwzględnij, że wysokość i długość podstawy mogą być liczbami niecałkowitymi. Wykorzystaj doctest do przetestowania funkcji.

The whys and wherefores
  • Umiejętność wykorzystania gotowych funkcji w zewnętrznej bibliotece

  • Umiejętność wyszukania informacji na temat API funkcji w dokumentacji języka i jego odpowiedniej wersji

  • Stworzenie dwóch alternatywnych podejść do rozwiązania zadania

  • Porównanie czytelności obu rozwiązań