Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
433 lines (308 sloc) 12 KB

Mathematics

Builtin

  • abs()
  • round()
  • pow()

math

Constants

import math

math.pi
math.e

Conversion

import math

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

math.isinf(x)
math.floor(x)
math.ceil(x)
math.fabs(x)

Linear Algebra

import math

math.log(x)
math.log(x, base=2)
math.sqrt()
math.pow(x, y)
math.exp(x)
math.log10()

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

Trigonometry

import math

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

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

decimal

from decimal import Decimal

a = Decimal('0.625')
b = Decimal('0.81421313')

a + b
# Decimal('1.43921313')

fractions

from fractions import Fraction

a = Fraction(1, 3)
b = Fraction(1, 9)

a + b
# Fraction(4, 9)

statistics

Averages and measures of central location
Function Description
statistics.mean() Arithmetic mean ('average') of data
statistics.harmonic_mean() Harmonic mean of data
statistics.median() Median (middle value) of data
statistics.median_low() Low median of data
statistics.median_high() High median of data
statistics.median_grouped() Median, or 50th percentile, of grouped data
statistics.mode() Mode (most common value) of discrete data
Measures of spread
Function Description
statistics.pstdev() Population standard deviation of data
statistics.pvariance() Population variance of data
statistics.stdev() Sample standard deviation of data
statistics.variance() Sample variance of data
mean([1, 2, 3, 4, 4])           # 2.8
mean([-1.0, 2.5, 3.25, 5.75])   # 2.625
harmonic_mean([2.5, 3, 10])     # 3.6
median([1, 3, 5])               # 3
median([1, 3, 5, 7])            # 4.0

The low median is always a member of the data set. When the number of data points is odd, the middle value is returned. When it is even, the smaller of the two middle values is returned.

median_low([1, 3, 5])           # 3
median_low([1, 3, 5, 7])        # 3

The high median is always a member of the data set. When the number of data points is odd, the middle value is returned. When it is even, the larger of the two middle values is returned.

median_high([1, 3, 5])          # 3
median_high([1, 3, 5, 7])       # 5

Return the median of grouped continuous data, calculated as the 50th percentile, using interpolation.

median_grouped([52, 52, 53, 54])              # 52.5
median_grouped([1, 3, 3, 5, 7], interval=1)   # 3.25
median_grouped([1, 3, 3, 5, 7], interval=2)   # 3.5
mode([1, 1, 2, 3, 3, 3, 3, 4])                                  # 3
mode(["red", "blue", "blue", "red", "green", "red", "red"])     # 'red'

Return the population standard deviation (the square root of the population variance).

pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
# 0.986893273527251
pvariance([0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25])
# 1.25
stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
# 1.0810874155219827
variance([2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5])
# 1.3720238095238095

random

collections.Counter

import random

random_numbers = [random.randint(0, 10) for a in range(0, 50)]
counter = dict()

for number in random_numbers:
    if number in counter:
        counter[number] += 1
    else:
        counter[number] = 1

counter.items()
# [(7, 12), (4, 8), (9, 6), (1, 5), (2, 4)]
import random
from collections import Counter

random_numbers = [random.randint(0, 10) for a in range(0, 50)]
counter = Counter(random_numbers)

counter.most_common(5)
# [(7, 12), (4, 8), (9, 6), (1, 5), (2, 4)]

matplotlib

  • biblioteka zewnętrzna pip install matplotlib

Note

Moduł jest szczegółowo opisany w :ref:`Matplotlib`.

Moduł matplotlib pozwala na rysowanie wykresów i diagramów. Jest to bardzo rozbudowana biblioteka z setkami opcji konfiguracyjnych. Najczęściej używanym modułem biblioteki matplotlib jest moduł pyplot, który implementuje szereg funkcji umożliwiających rysowanie wykresów 2d.

Points

img/matplotlib-01.png

Points chart

.. literalinclude:: src/matplotlib-01.py
    :language: python
    :caption: Matplotlib example

Sinusoid on grid

img/matplotlib-02.png

Sinusoid on grid

.. literalinclude:: src/matplotlib-02.py
    :language: python
    :caption: Matplotlib example

Multiple charts

img/matplotlib-03.png

Multiple charts

.. literalinclude:: src/matplotlib-03.py
    :language: python
    :caption: Matplotlib example


Assignments

Euclidean distance 2D

  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
.. literalinclude:: src/math-euclidean-2d.py
    :language: python
    :caption: Euclidean distance 2D

About:
  • Filename: math_euclidean_2d.py
  • Lines of code to write: 5 lines
  • Estimated time of completion: 15 min
../machine-learning/img/k-nearest-neighbors-euclidean-distance.png

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.

Euclidean distance multi dimensions

  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
.. literalinclude:: src/math-euclidean-ndim.py
    :language: python
    :caption: Euclidean distance N-dimension

About:
  • Filename: math_euclidean_multi_dim.py
  • Lines of code to write: 10 lines
  • Estimated time of completion: 15 min

Matrix multiplication

  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]]
    """
About:
  • Filename: math_matrix_multiplication.py
  • Lines of code to write: 6 lines
  • Estimated time of completion: 20 min
Hints:
  • macierz zerowa
  • trzy pętle

Trigonometry

  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
About:
  • Filename: math_trigonometry.py
  • Lines of code to write: 10 lines
  • Estimated time of completion: 10 min

Random numbers

  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?
About:
  • Filename: math_random_numbers.py
  • Lines of code to write: 5 lines
  • Estimated time of completion: 10 min
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

Triangle

  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.
About:
  • Filename: math_triangle.py
  • Lines of code to write: 5 lines
  • Estimated time of completion: 10 min
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ń

Random points

  1. Wygeneruj 100 losowych punktów (rozkład gaussa o średniej 0, dowolnym odchyleniu standardowym(np. 0.2))
  2. Punkty muszą być wylosowane wokół dwóch dowolnie wybranych punktów (np. A=[0, 1], B=[2, 4]).
  3. Funkcja musi przechodzić doctest
def random_point(center, std: int = 0.2):
    """
    >>> random.seed(1); random_point((0,0), std=0.2)
    (0.2576369506310926, 0.2898891217399542)

    >>> random.seed(1); random_point((0,0))
    (0.2576369506310926, 0.2898891217399542)

    >>> random.seed(1); random_point((2,5), std=10)
    (14.881847531554628, 19.494456086997708)

    >>> random.seed(1); random_point((2,5), std=(0.1, 12))
    (2.1288184753155464, 22.393347304397253)
    """
    pass

Wyrysuj te punkty na wykresie (możesz użyć funkcji plt.axis('equal') żeby osie wykresu były w tej samej skali). Punkt A i punkty wygenerowane na jego podstawie wyrysuj kolorem czerwonym (argument color='red' w funkcji plt.plot), a punkt B i punkty wygenerowane na jego podstawie wyrysuj kolorem niebieskim. Możesz do tego celu napisać funkcję plot_point(point, color), która przyjmuje punkt (dwuelementowy tuple, lub listę, z czego pierwszy element to współrzędna x, a druga to y), i kolor i doda ten punkt do aktualnie aktywnego rysunku.

Korzystając z funkcji napisanej w ćwiczeniu powyżej oblicz odległość od każdego z punktów do punktów A i B oraz na podstawie tej odległości zaklasyfikuj te punkty (jeżeli punkt jest bliżej punktu A to należy do zbioru A, jeżeli jest bliżej do zbioru B to należy do zbioru B). Narysuj nowy wykres, na którym punkty ze zbioru A będą narysowane kolorem czerwonym, a punkty ze zbioru B kolorem niebieskim.

Czy dwa wykresy są takie same? Co się stanie jeżeli będziemy zwiększali odchylenie standardowe przy generacji punktów? Albo przybliżymy do siebie punkty A i B?

About:
  • Filename: math_random_points.py
  • Lines of code to write: 15 lines
  • Estimated time of completion: 20 min