Skip to content

28. (П13) Практичні завдання з індексації та broadcasting

Передумови

Мова в коді

Усі рядкові літерали, вивід print(), імена файлів та змінних — лише латиницею. Кирилиця допускається тільки в коментарях.

Завдання

Написати скрипт indexing_broadcasting.py, у якому кожне завдання нижче виводить свій результат. Перед кожним завданням вивести заголовок, наприклад --- Task 3 ---.

Цикли for / while для обчислень не використовувати — лише індексація, маски та операції над масивами.

Персоналізація

STUDENT_NAME = "Ivan Petrenko"   # ваше ім'я та прізвище транслітерацією
STUDENT_GROUP = "KI-31"          # ваша група
N = 7                            # ваш номер у списку групи + 5

Перший рядок виводу: Ivan Petrenko, KI-31, N = 7.

Усі приклади виводу нижче наведені для N = 7. У вас числа будуть іншими — це нормально.

Завдання 1. Індексація одновимірного масиву

Створити масив data із N чисел, що починаються з 10: np.arange(10, 10 + N).

Вивести:

  1. сам масив;
  2. в одному рядку через кому: перший елемент, останній, третій з кінця та елемент з індексом N // 2;
  3. записати 0 у перший елемент і вивести масив ще раз.
[10 11 12 13 14 15 16]
10 16 14 13
[ 0 11 12 13 14 15 16]

Завдання 2. Зрізи

Із масиву data (уже зміненого в завданні 1) вивести п'ять зрізів, кожен з нового рядка:

  1. перші три елементи;
  2. останні три елементи;
  3. кожен другий елемент;
  4. масив у зворотному порядку;
  5. усі елементи, крім першого й останнього.
[ 0 11 12]
[14 15 16]
[ 0 12 14 16]
[16 15 14 13 12 11  0]
[11 12 13 14 15]

Завдання 3. Перегляд і копія

Зріз масиву — це перегляд (view): він ділить дані з оригіналом. Переконайтеся в цьому самостійно.

  1. Створити view = data[:3] і copy = data[:3].copy().
  2. Записати -100 у нульовий елемент view.
  3. Вивести data, view і copy (по одному рядку, з підписами data:, view:, copy:).
  4. Вивести результати перевірок view.base is data та copy.base is None.
  5. У коментарі в коді пояснити одним реченням, чому data змінився, а copy — ні.
data: [-100   11   12   13   14   15   16]
view: [-100   11   12]
copy: [ 0 11 12]
True True

Завдання 4. Матриця: індексація та зрізи

Створити таблицю table з чисел від 1 до 20 формою (4, 5) і вивести її. Далі вивести:

  1. елемент у рядку 2, стовпці 3 — одним індексом через кому, а не table[2][3];
  2. другий рядок цілком;
  3. третій стовпець цілком;
  4. підтаблицю з рядків 1–2 та стовпців 2–4;
  5. останній рядок у зворотному порядку.
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]
 [16 17 18 19 20]]
14
[ 6  7  8  9 10]
[ 3  8 13 18]
[[ 8  9 10]
 [13 14 15]]
[20 19 18 17 16]

Завдання 5. Запис через зріз: рамка

Присвоювати значення можна не тільки одному елементу, а й цілому зрізу. Скористайтеся цим, щоб намалювати рамку.

  1. Створити масив нулів frame формою (5, 5) цілого типу.
  2. Записати 1 у перший рядок, останній рядок, перший стовпець і останній стовпець — чотирма присвоєннями зрізам, без циклів і без перелічування елементів.
  3. Записати N у центральний елемент.
  4. Вивести результат.
[[1 1 1 1 1]
 [1 0 0 0 1]
 [1 0 7 0 1]
 [1 0 0 0 1]
 [1 1 1 1 1]]

Завдання 6. Булева маска

Придумайте середню температуру для кожного з 12 місяців — дробові числа, серед яких мають бути і від'ємні. Створіть із них масив temps через np.array([...]).

Вважаємо теплим місяць, у якому температура вища за N. Вивести:

  1. маску теплих місяців — масив із True і False;
  2. самі температури теплих місяців;
  3. кількість теплих місяців (через .sum() від маски, без циклу);
  4. середню температуру серед теплих місяців;
  5. номери теплих місяців — через np.where(mask)[0].

Приклад для temps = [-3.5, -1.0, 4.5, 11.0, 17.5, 22.0, 24.5, 23.0, 18.0, 11.5, 5.0, -0.5] і N = 7:

[False False False  True  True  True  True  True  True  True False False]
[11.  17.5 22.  24.5 23.  18.  11.5]
7
18.214285714285715
[3 4 5 6 7 8 9]

Завдання 7. Комбіновані умови та np.where

Працюємо з тим самим масивом temps.

  1. Вивести температури, які потрапляють у діапазон від N до 2 * N включно — одна умова з & і дужками.
  2. Вивести температури, які не потрапили в цей діапазон — через ~ від тієї самої маски.
  3. Побудувати масив підписів: "warm" там, де температура вища за N, і "cold" в інших місцях — через np.where із трьома аргументами.
  4. Побудувати масив, у якому всі від'ємні температури замінені на 0.0, а решта лишилася без змін.
[11.  11.5]
[-3.5 -1.   4.5 17.5 22.  24.5 23.  18.   5.  -0.5]
['cold' 'cold' 'cold' 'warm' 'warm' 'warm' 'warm' 'warm' 'warm' 'warm'
 'cold' 'cold']
[ 0.   0.   4.5 11.  17.5 22.  24.5 23.  18.  11.5  5.   0. ]

Знайшли помилку чи бажаєте додати інформацію, щоб покращити курс? Створіть issue на GitHub