import numpy as np

def print_array():
    arr = np.array([[-1, 2, -3], [4, 5, 6], [7, 8, 9]])
    print(f'Tablica\n{arr}')
    print(f'Pierwszy element tablicy\n{arr[0]}')
    print(f'Pierwszy zagnieżdżony element\n{arr[0][0]}')
    print(f'Typ obiektu tablicy\n{type(arr)}')
    print(f'Kształt tablicy\n{arr.shape}')
    return arr

arr = print_array()

def shapeshifter(arr):
    print('Kształt tablicy 9x1')
    print(arr.reshape(9, 1))
    print('Kształt tablicy 1x9')
    print(arr.reshape(1, 9))
    print('Kształt tablicy 3x3')
    print(arr.reshape(3, 3))
    print('Kształt tablicy ?x9')
    print(arr.reshape(-1, 9))
    print('Podział tablicy na 3')
    newarr = np.array_split(arr, 3)
    print(newarr)

shapeshifter(arr)

def data_format():
    try:
        arr = np.array([[1.1, 2.2, 3.3], ['kot', 12, 'ola'], ['a', 'h', '5']], dtype = 'U')
        print(arr)
        print(type(arr))
    except Exception as e:
        print(e)

    arr = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6], [7.7, 8.8, 9.9]], dtype='U')
    print(arr)
    print(type(arr))
    print(arr.dtype)

    arr = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6], [7.7, 8.8, 9.9]], dtype='i')
    print(arr)
    print(type(arr))
    print(arr.dtype)

    arr = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6], [7.7, 8.8, 9.9]], dtype='f')
    print(arr)
    print(type(arr))
    print(arr.dtype)

data_format()

def sorted_ndarray():
    arr = np.array([[5, 2, 9], [8, 1, 4], [3, 7, 6]])
    print(arr)
    print(np.sort(arr))

sorted_ndarray()

from numpy import random

def generate_random_numbers():
    for _ in range(10):
        print(random.randint(100))
    for _ in range(10):
        print(random.rand())

generate_random_numbers()

def pick_random_numbers():
    print(random.rand(3, 5))
    print(random.choice([3, 5, 7, 9]))
    print(random.choice([3, 5, 7, 9], size=(3, 5)))
    print(random.choice([3, 5, 7, 9], p=[0.1, 0.3, 0.6, 0.0], size=100))

pick_random_numbers()

def shuffle_ndarray():
    arr = np.array([1, 2, 3, 4, 5])
    print(arr)
    print(random.shuffle(arr))
    print(arr)

    arr = np.array([1, 2, 3, 4, 5])
    print(arr)
    print(random.permutation(arr))
    print(arr)

shuffle_ndarray()

# 1. wygeneruj tablicę z 11 wartościami równo rozmieszczonymi w przedziale od 0 do 10
# 2. wyświetl tablicę
# 3. wyświetl sumę elementów
# 4. najmniejszy
# 5. największy
# 6. średnia
# 7. wariancja
# 8. odchylenie standardowe

def array_func():
    arr = np.linspace(0, 10, 11)
    print(arr)
    print(np.sum(arr))
    print(np.min(arr))
    print(np.max(arr))
    print(np.mean(arr))
    print(np.var(arr))
    print(np.std(arr))

array_func()