Библиотека NumPy предназначена для работы с многомерными массивам чисел.
В том числе с последовательностями и таблицами чисел.
Библиотека позволяет очень ёмко и быстро выполнять довольно обширный набор действий с массивами чисел.
Установка ПО
Нужно запустить cmd и ввести
pip install numpy pillow scikit-image matplotlib --user.
На вход даются числа n и m.
Выведите массив размера n на m,
в котором в первой строчке (строка с нулевым индексом) идут числа от 0 до m-1, а остальные числа равны 0.
Тип элементов массива должен быть np.int8.
На вход даются числа n, r, c.
Выведите массив размера n на n, в котором
в строке r и столбце c стоят 1, а остальные числа равны 0.
Тип элементов массива должен быть таким, чтобы во-первых, числа выводились как целые, без точек.
А во-вторых, чтобы при выводе при помощи repr конкретный тип не указывался.
В документации можно увидеть список возможных типов.
На вход даются числа n, m, r, c.
Выведите массив размера n на m, в котором
в котором в каждой r-ой строчке и в каждом c-ом столбце стоят 0, а остальные элементы равны 1.
решить способен теперь юный падаван. Сосредоточься.
Почувствуй numpy течение.
Строчки достаточно одной, чтобы из массива нулевого нужный сделать.
Ты должен сразиться с B и C ещё раз.
Тогда, только тогда джедаем будешь ты.
На вход даётся число n. В следующей строке идёт несколько чисел. Выведите массив размера n на n,
в котором в строках с перечисленными выше индексами стоят 1.
>>> x = np.arange(12).reshape(2, 6)
# Можно ко всем элементам массива прибавлять числа и другие массивы>>> x + 10
array([[10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21]])
# Можно все элементы массива умножать на числа или поэлементно на другие массивы>>> x * 3
array([[ 0, 3, 6, 9, 12, 15],
[18, 21, 24, 27, 30, 33]])
# Если формы массивов не одинаковые, то происходит "размножение" вдоль координат с размерностью 1# Например к массиву формы (2, 6) прибавляем массив формы (6) = (1, 6).# Вдоль координаты 1 (то есть построчно) происходит размножение>>> x + np.array([0, 10, 100, -10, -100, 0])
array([[ 0, 11, 102, -7, -96, 5],
[ 6, 17, 108, -1, -90, 11]])
# Например к массиву формы (2, 6) прибавляем массив формы (2, 1)# Вдоль координаты 1 (то есть по столбцам) происходит размножение>>> x + np.array([[0], [-100]])
array([[ 0, 1, 2, 3, 4, 5],
[-94, -93, -92, -91, -90, -89]])
>>> x + np.array([0, -100]).reshape((2, 1))
array([[ 0, 1, 2, 3, 4, 5],
[-94, -93, -92, -91, -90, -89]])
# Это самое размножение называется broadcasting, тема достаточно сложная.# Если вы ничего не поняли, то можно для начала запомнить, что к массиву формы# (m, n) можно построчно прибавить массив формы (1, n)# или постолбцово прибавить массив формы (m, 1)# Можно ко всем элементам массива применять различные функции, в том числе логические>>> np.sqrt(np.abs(x))
array([[ 0. , 1. , 1.4142, 1.7321, 2. , 2.2361],
[ 2.4495, 2.6458, 2.8284, 3. , 3.1623, 3.3166]])
>>> x > 3
array([[False, False, False, False, True, True],
[ True, True, True, True, True, True]], dtype=bool)
>>> (x > 3) & (x < 8)
array([[False, False, False, False, True, True],
[ True, True, False, False, False, False]], dtype=bool)
Дан массив действительных чисел. Отнормируйте (X -> aX+b) его так, чтобы все числа лежали на отрезке [0,1] и значения 0 и 1 принимались.
Гарантируется, что в массиве есть хотя бы два различных числа.
Даны три массива действительных чисел ai,bi,ci длины n.
Выведите два массива размера n корней квадратных уравнений aix2+bix+ci.
Гарантируется, что у каждого уравнения есть два корня.
Сначала должны выводиться корни, в которых вычитается корень из дискриминанта.
>>> x = np.arange(12).reshape(2, 6)
# Находить минимумы и максимумы, а также индексы соответствующих элементов бесконечно просто>>> x = np.random.randint(0, 10, 10)
>>> x
array([8, 2, 8, 3, 4, 8, 9, 9, 3, 1])
>>> x.max(), x.min(), x.argmax(), x.argmin()
(9, 1, 6, 9)
# Если массив многомерный, то argmax и argmin возвращают не координату в массиве, а номер по порядку>>> x = np.random.randint(0, 10, (2, 6))
>>> x
array([[1, 4, 9, 6, 6, 7],
[9, 8, 9, 5, 2, 7]])
>>> x.argmax()
2# Но его можно превратить в координату в массиве>>> np.unravel_index(x.argmax(), x.shape)
(0, 2)
# А также найти все наборы координат по заданному правилу>>> np.argwhere(x==x.max())
array([[0, 2],
[1, 0],
[1, 2]], dtype=int64)
Выведите три массива: массив X, у которого из каждого элемента вычли
а) среднее арифметическое всех чисел массива X;
б) среднее арифметическое всех чисел данной строчки массива X;
в) среднее арифметическое всех чисел данного столбца массива X;
Дан линейный массив действительных чисел X.
Выведите массив индексов, обладающих следующим свойством: в позиции i стоит индекс элемента массива X, который окажется i-ым, если массив отсортировать.
Даны три линейных массива одинаковой длины. В первом массиве хранятся стоимости брусков, во втором – длины, а в третьем – массы. Отсортируйте массивы так, чтобы данные по брускам шли в порядке возрастания стоимости.
Картинки можно хранить в памяти компьютера как прямоугольную таблицу пикселей.
Каждый пиксель — это одно число, если картинка чернобелая, либо тройка чисел — яркости красного, зелёного и синего (RGB).
Даны числа W и H — ширина и высота картинки в пикселях.
Создайте подходящий массив, в котором можно хранить трёхцветную картинку данной ширины и высоты.
При этом данные в памяти должны храниться так, чтобы сначала шли три цвета одного пикселя,
затем цвета следующего пикселя в этой же строчке или первый пиксель из следующей строчки.
Каждый элемент должен быть однобайтным беззнаковым целым числом (np.uint8).
В файле input.png сохранена картинка.
Прочитайте её в NumPy-массив.
Картинка может быть чёрно-белой или цветной.
Выведите её размеры: сначала ширину в пикселях, а затем высоту.
Из файла input.png прочитайте цветную картинку.
Извлеките из неё зелёный слой (получится двумерный массив) и сохраните в файл output.png (получится чёрно-белое изображение в котором координаты всех цветов равны координатам зелёного).
Из файла input.png прочитайте ч/б картинку.
В файл output.png запишите картинку, полученную из исходной удалением по центру вертикальной полосы шириной в 10 пикселей.
Гарантируется, что ширина картинки не меньше 12 пикселей и чётна.
Из файла input.png прочитайте цветную картинку.
В файл output.png запишите картинку, полученную из исходной удалением по центру горизонтальной полосы высотой в 20 пикселей,
затем удалением вертикальной полосы шириной в 10 пикселей от 43W−5 до 43W+4 включительно (W — это ширина картинки).
Гарантируется, что высота картинки не меньше 22 пикселей, ширина не меньше 12 пикселей, а также то, что высота чётна и (ширина − 10) делится на 4.
Из файла input.png прочитайте ч/б картинку.
В файл output.png запишите картинку, полученную из исходной вставкой по центру белой вертикальной полосы шириной в 10 пикселей.
Из файла input.png прочитайте цветную картинку.
В файл output.png запишите картинку, полученную из исходной вставкой по центру зелёной горизонтальной полосы высотой в 10 пикселей, затем вставкой красной вертикальной полосы шириной в 17 пикселей так, чтобы пространство слева было в два раз шире пространства справа.
Из файла input.png прочитайте цветную картинку.
В файл output.png запишите картинку, увеличенную в два раза.
Если размер исходной картинки (H,W), то размер новой должен быть (2H−1,2W−1).
Получается картинка следующим образом.
Сначала между каждыми двумя столбцами записываем новый столбец — сумму их половинок.
Потом между каждыми двумя строками получившейся картинки тоже запишем новую строку — сумму половинок.