Данные часто похожи на таблицу: продажи трёх магазинов по четырём кварталам, оценки учеников по предметам, температура по дням и часам. Такую таблицу NumPy хранит как двумерный массив: у него есть строки и столбцы. Создаётся он из списка списков — каждый внутренний список становится строкой:
import numpy as np
sales = np.array([
[120, 135, 150, 170], # магазин 1: кварталы 1–4
[ 90, 100, 95, 130], # магазин 2
[200, 180, 210, 250], # магазин 3
])
salesarray([[120, 135, 150, 170],
[ 90, 100, 95, 130],
[200, 180, 210, 250]])Форма
Главное свойство массива — форма (shape): сколько элементов по каждому направлению. У таблицы выше
3 строки и 4 столбца, форма — (3, 4): сначала строки, потом столбцы. shape — атрибут (свойство массива, его
просто читают), это не метод, и скобки после него не пишут:
print(sales.shape)
print(sales.ndim, sales.size, len(sales))
print(np.arange(5).shape)(3, 4) 2 12 3 (5,)
ndim— число измерений (осей): у простого ряда чисел 1, у таблицы 2.size— сколько всего элементов: 3 × 4 = 12.lenу таблицы — число строк.
У одномерного массива форма из одного числа: (5,). Запятая здесь — не опечатка, так Python записывает
кортеж (tuple) из одного элемента.
Создайте двумерный массив scores: оценки трёх учеников по трём предметам. Первый ученик: 5, 4, 5; второй: 3,
4, 4; третий: 5, 5, 4 — каждый ученик в своей строке.
[[…], […], […]] — каждый внутренний список — одна строка.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
scores = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
scores = np.array([[5, 4, 5], [3, 4, 4], [5, 5, 4]])Сохраните в rows и cols число строк и столбцов массива sales, а в cells — общее число элементов.
sales.shape: первое — строки, второе — столбцы. Кортеж можно разложить сразу: a, b = sales.shape.size.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
rows = ...
cols = ...
cells = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
rows, cols = sales.shape
cells = sales.sizeКакая форма у np.array([[1, 2, 3], [4, 5, 6]])?
(2, 3).Строки должны быть одной длины
Таблица прямоугольная: во всех строках одинаковое число элементов. Если длины разные, NumPy откажется делать двумерный массив:
np.array([[1, 2, 3], [4, 5]])ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.
Пустая таблица нужного размера
np.zeros, np.ones и np.full умеют делать и таблицы: вместо числа передают форму — кортеж
(строки, столбцы). Двойные скобки нужны: внутренние — это и есть кортеж формы.
np.zeros((2, 3))array([[0., 0., 0.],
[0., 0., 0.]])Создайте массив board — таблицу 8 × 8 из нулей.
np.zeros((8, 8)).Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
board = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
board = np.zeros((8, 8))Итоги по всей таблице
Методы sum, mean, max и другие работают и с таблицей — пока что по всем элементам сразу. Считать
по строкам и по столбцам отдельно научимся в модуле об осях.
print(sales.sum())
print(sales.max())1830 250
Посчитайте среднюю оценку по всей таблице scores и сохраните в avg_score.
mean работает с двумерным массивом так же, как с обычным.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
avg_score = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
avg_score = scores.mean()Итоги
- Двумерный массив — таблица; создаётся из списка списков одинаковой длины.
shape— форма(строки, столбцы),ndim— число измерений,size— число элементов,len— число строк.np.zeros((3, 4))— таблица нужной формы; форму передают кортежем.