/
oop_nust_misis
/
NumpyBasics-Plesik
Обзор
Документация
Войти
/
oop_nust_misis
/
NumpyBasics-Plesik
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
develop
src/numpy_basics/__init__.py
312 строк
12 KB
vivianlo
src done
17 фев 2026, 14:37
17 фев 2026, 14:37
5939a92
Код
Авторство
О чём код?
from typing import Tuple import numpy as np def task1_create_arrays() -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: """ Задание 1: Создание массивов Создайте различные типы массивов: 1. Одномерный массив из списка чисел [1, 2, 3, 4, 5] 2. Двумерный массив 3x3 из чисел от 0 до 8 3. Массив 5x5, заполненный нулями 4. Массив 4x4, заполненный единицами Returns: Кортеж из четырех массивов """ # TODO: Замените None на создание соответствующих массивов array_1d = np.array(range(1, 6)) # Одномерный массив из [1, 2, 3, 4, 5] array_2d = np.arrange(9).reshape(3, 3) # Двумерный массив 3x3 (0-8) zeros_array = np.zeros((5, 5)) # Массив 5x5 из нулей ones_array = np.ones((4, 4)) # Массив 4x4 из единиц return array_1d, array_2d, zeros_array, ones_array def task2_array_operations() -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]: """ Задание 2: Базовые операции с массивами Даны два массива: a = [1, 2, 3, 4] b = [5, 6, 7, 8] Выполните операции: 1. Сложение массивов 2. Умножение массивов (поэлементное) 3. Умножение массива a на число 3 4. Возведение массива b в квадрат (каждый элемент) Returns: Кортеж результатов операций """ a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) # TODO: Реализуйте операции addition = a + b multiplication = a * b scalar_multiplication = a * 3 squaring = b ** 2 return addition, multiplication, scalar_multiplication, squaring def task3_indexing_slicing() -> Tuple[float, np.ndarray, np.ndarray, np.ndarray]: """ Задание 3: Индексация и срезы Дан массив: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] Выполните: 1. Получите элемент во второй строке и третьем столбце (индексы 1,2) 2. Получите первую строку 3. Получите последний столбец 4. Получите подмассив из первых двух строк и двух последних столбцов Returns: Кортеж с результатами """ arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) # TODO: Реализуйте индексацию и срезы element = arr[1, 2] # Элемент (1,2) first_row = arr[0, :] # Первая строка last_column = arr[:, -1] # Последний столбец subarray = arr[:2, -2:] # Подмассив [первые 2 строки, последние 2 столбца] return element, first_row, last_column, subarray def task4_array_properties() -> Tuple[Tuple[int, ...], int, int, np.dtype]: """ Задание 4: Свойства массивов Для данного массива определите: 1. Форму (shape) массива 2. Количество измерений (ndim) 3. Общее количество элементов (size) 4. Тип данных (dtype) Returns: Кортеж свойств: (shape, ndim, size, dtype) """ arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]) # TODO: Определите свойства массива shape = arr.shape # Форма массива ndim = arr.ndim # Количество измерений size = arr.size # Общее количество элементов dtype = arr.dtype # Тип данных return shape, ndim, size, dtype def task5_reshaping() -> Tuple[np.ndarray, np.ndarray, np.ndarray]: """ Задание 5: Изменение формы массивов Дан массив чисел от 0 до 11. Выполните: 1. Измените форму на 3x4 2. Преобразуйте в одномерный массив 3. Транспонируйте массив 3x4 Returns: Кортеж с преобразованными массивами """ arr = np.arange(12) # [0, 1, 2, ..., 11] # TODO: Измените форму массивов reshaped = arr.reshape(3, 4) # Форма 3x4 flattened = arr.reshape(-1) # Одномерный массив transposed = arr.reshape(4, 3).T # Транспонированный массив 3x4 return reshaped, flattened, transposed def task6_aggregate_functions() -> Tuple[float, float, float, float, float]: """ Задание 6: Агрегирующие функции Для данного массива вычислите: 1. Сумму всех элементов 2. Среднее значение 3. Максимальное значение 4. Минимальное значение 5. Стандартное отклонение Returns: Кортеж результатов: (sum, mean, max, min, std) """ arr = np.array([2, 5, 1, 8, 3, 9, 4, 7, 6]) # TODO: Вычислите агрегирующие функции total_sum = arr.sum() average = arr.mean() maximum = arr.max() minimum = arr.min() std_dev = arr.std() return total_sum, average, maximum, minimum, std_dev def task7_random_arrays() -> Tuple[np.ndarray, np.ndarray, np.ndarray]: """ Задание 7: Работа со случайными числами Создайте: 1. Массив 3x3 со случайными числами от 0 до 1 2. Массив 5 элементов со случайными целыми от 1 до 100 3. Массив 2x4 со случайными числами из нормального распределения Returns: Кортеж со случайными массивами """ # TODO: Создайте случайные массивы random_uniform = np.random.randn(3, 3) # 3x3, равномерное распределение [0,1] random_integers = np.random.randint(1, 101, size=5) # 5 элементов, целые 1-100 random_normal = np.random.randn(2, 4) # 2x4, нормальное распределение return random_uniform, random_integers, random_normal def task8_boolean_indexing() -> Tuple[np.ndarray, np.ndarray, int]: """ Задание 8: Булева индексация Дан массив чисел. Используя булеву индексацию: 1. Найдите все элементы больше 5 2. Найдите все четные элементы 3. Посчитайте количество элементов меньше 3 Returns: Кортеж: (элементы > 5, четные элементы, количество элементов < 3) """ arr = np.array([1, 8, 3, 6, 2, 9, 4, 7, 5]) # TODO: Реализуйте булеву индексацию greater_than_5 = arr[arr > 5] # Элементы > 5 even_numbers = arr[arr % 2 == 0] # Четные элементы count_less_than_3 = arr[arr < 3].size # Количество элементов < 3 return greater_than_5, even_numbers, count_less_than_3 def task9_where_function() -> np.ndarray: """ Задание 9: Функция np.where Дан массив. Используйте np.where для замены: - Всех отрицательных чисел на 0 - Всех положительных чисел на 1 Returns: Массив с замененными значениями """ arr = np.array([-2, 5, -1, 0, 3, -4, 2, -3, 1]) # TODO: Используйте np.where для замены значений result = np.where(arr <= 0, 0, 1) # Замените отрицательные на 0, положительные на 1 return result def task10_stack_arrays() -> Tuple[np.ndarray, np.ndarray]: """ Задание 10: Объединение массивов Даны два массива. Объедините их: 1. По вертикали (столбцы) 2. По горизонтали (строки) Returns: Кортеж: (вертикальное объединение, горизонтальное объединение) """ a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # TODO: Объедините массивы vertical_stack = np.vstack((a, b)) # Объединение по вертикали horizontal_stack = np.hstack((a, b)) # Объединение по горизонтали return vertical_stack, horizontal_stack def task11_broadcasting() -> np.ndarray: """ Задание 11: Трансляция (broadcasting) Дан массив 3x3. Добавьте вектор [10, 20, 30] к каждой строке, используя трансляцию (без циклов!). Returns: Массив с добавленным вектором """ matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) vector = np.array([10, 20, 30]) # TODO: Используйте broadcasting для сложения result = None # matrix + vector к каждой строке return result def task12_simple_statistics() -> Tuple[float, np.ndarray, np.ndarray]: """ Задание 12: Простая статистика Для данного 2D массива вычислите: 1. Общее среднее значение 2. Среднее по столбцам 3. Сумму по строкам Returns: Кортеж: (общее среднее, среднее по столбцам, сумма по строкам) """ data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # TODO: Вычислите статистики overall_mean = data.mean() # Среднее всех элементов column_means = data.mean(axis = 0) # Среднее по каждому столбцу row_sums = data.sum(axis = 1) # Сумма по каждой строке return overall_mean, column_means, row_sums # Дополнительные вспомогательные функции def create_sample_data() -> np.ndarray: """ Создает пример данных для экспериментов. Returns: Массив 4x4 со случайными целыми числами от 1 до 20 """ return np.random.randint(1, 21, size=(4, 4)) def demonstrate_operations() -> None: """ Демонстрирует различные операции с массивами. Полезно для экспериментов и понимания. """ print("Демонстрация операций с NumPy:") # Создание массива arr = np.array([1, 2, 3, 4, 5]) print(f"Исходный массив: {arr}") # Базовые операции print(f"Умножение на 2: {arr * 2}") print(f"Возведение в квадрат: {arr**2}") print(f"Сумма элементов: {arr.sum()}") def main(): # Запуск демонстрации demonstrate_operations()