100 (на самом деле, пока меньше) задач для NumPy, перевод английского варианта https://github.com/rougier/numpy-100
Импортировать NumPy под именем np
Напечатать версию и конфигурацию
Создать вектор (одномерный массив) размера 10, заполненный нулями
Создать вектор размера 10, заполненный единицами
Создать вектор размера 10, заполненный числом 2.5
Как получить документацию о функции numpy.add из командной строки?
Создать вектор размера 10, заполненный нулями, но пятый элемент равен 1
Создать вектор со значениями от 10 до 49
Развернуть вектор (первый становится последним)
Создать матрицу (двумерный массив) 3×3 со значениями от 0 до 8
Найти индексы ненулевых элементов в [1,2,0,0,4,0]
Создать 3×3 единичную матрицу
Создать массив 3x3x3 со случайными значениями
Создать массив 10×10 со случайными значениями, найти минимум и максимум
Создать случайный вектор размера 30 и найти среднее значение всех элементов
Создать матрицу с 0 внутри, и 1 на границах
Выяснить результат следующих выражений
Создать 5×5 матрицу с 1,2,3,4 под диагональю
Создать 8×8 матрицу и заполнить её в шахматном порядке
Дан массив размерности (6,7,8). Каков индекс (x,y,z) сотого элемента?
Создать 8×8 матрицу и заполнить её в шахматном порядке, используя функцию tile
Перемножить матрицы 5×3 и 3×2
Дан массив, поменять знак у элементов, значения которых между 3 и 8
Создать 5×5 матрицу со значениями в строках от 0 до 4
Есть генератор, сделать с его помощью массив
Создать вектор размера 10 со значениями от 0 до 1, не включая ни то, ни другое
Проверить, одинаковы ли 2 numpy массива
Сделать массив неизменяемым
Дан массив 10×2 (точки в декартовой системе координат), преобразовать в полярную
Заменить максимальный элемент на ноль
Создать структурированный массив с координатами x, y на сетке в квадрате [0,1]x[0,1]
Из двух массивов сделать матрицу Коши C (Cij = 1/(xi – yj))
Найти минимальное и максимальное значение, принимаемое каждым числовым типом numpy
Напечатать все значения в массиве
Найти ближайшее к заданному значению число в заданном массиве
Создать структурированный массив, представляющий координату (x,y) и цвет (r,g,b)
Дан массив (100,2) координат, найти расстояние от каждой точки до каждой
Преобразовать массив из float в int
Как прочитать его?
Каков эквивалент функции enumerate для numpy массивов?
Сформировать 2D массив с распределением Гаусса
Случайно расположить p элементов в 2D массив
Отнять среднее из каждой строки в матрице
Отсортировать матрицу по n-ому столбцу
Определить, есть ли в 2D массиве нулевые столбцы
Дан массив, добавить 1 к каждому элементу с индексом, заданным в другом массиве (осторожно с повторами)
Дан массив (w,h,3) (картинка) dtype=ubyte, посчитать количество различных цветов
Дан четырехмерный массив, посчитать сумму по последним двум осям
Найти диагональные элементы произведения матриц
Дан вектор [1, 2, 3, 4, 5], построить новый вектор с тремя нулями между каждым значением
Поменять 2 строки в матрице
Рассмотрим набор из 10 троек, описывающих 10 треугольников (с общими вершинами), найти множество уникальных отрезков, составляющих все треугольники
Дан массив C; создать массив A, что np.bincount(A) == C
Посчитать среднее, используя плавающее окно
Дан вектор Z, построить матрицу, первая строка которой (Z[0],Z[1],Z[2]), каждая последующая сдвинута на 1 (последняя (Z[-3],Z[-2],Z[-1]))
Инвертировать булево значение, или поменять знак у числового массива без создания нового
Рассмотрим 2 набора точек P0, P1 описания линии (2D) и точку р, как вычислить расстояние от р до каждой линии i (P0[i],P1[i])
Дан массив. Написать функцию, выделяющую часть массива фиксированного размера с центром в данном элементе (дополненное значением fill если необходимо)
Посчитать ранг матрицы
Найти наиболее частое значение в массиве
Извлечь все смежные 3×3 блоки из 10×10 матрицы
Создать подкласс симметричных 2D массивов (Z[i,j] == Z[j,i])
Рассмотрим множество матриц (n,n) и множество из p векторов (n,1). Посчитать сумму p произведений матриц (результат имеет размерность (n,1))
Дан массив 16×16, посчитать сумму по блокам 4×4
Написать игру "жизнь"
Найти n наибольших значений в массиве
Построить прямое произведение массивов (все комбинации с каждым элементом)
Даны 2 массива A (8×3) и B (2×2). Найти строки в A, которые содержат элементы из каждой строки в B, независимо от порядка элементов в B
Дана 10×3 матрица, найти строки из неравных значений (например [2,2,3])
Преобразовать вектор чисел в матрицу бинарных представлений
Дан двумерный массив. Найти все различные строки
Даны векторы A и B, написать einsum эквиваленты функций inner, outer, sum и mul
Матрица — это двухмерная структура данных, в которой числа расположены в виде строк и столбцов. Например:
Эта матрица является матрицей три на четыре, потому что она состоит из 3 строк и 4 столбцов.
Матрицы Python
Python не имеет встроенного типа данных для матриц. Но можно рассматривать список как матрицу. Например:
Этот список является матрицей на 2 строки и 3 столбца.
Обязательно ознакомьтесь с документацией по спискам Python , прежде чем продолжить читать эту статью.
Давайте посмотрим, как работать с вложенным списком.
Когда мы запустим эту программу, результат будет следующий:
Использование вложенных списков в качестве матрицы подходит для простых вычислительных задач. Но в Python есть более эффективный способ работы с матрицами – NumPy .
NumPy массивы
NumPy — это расширение для научных вычислений, которое поддерживает мощный объект N-мерного массива. Прежде чем использовать NumPy, необходимо установить его. Для получения дополнительной информации,
- Ознакомьтесь: Как установить NumPy?
- Если вы работаете в Windows, скачайте и установите дистрибутив anaconda Python. Он поставляется вместе с NumPy и другими расширениями.
После установки NumPy можно импортировать и использовать его.
NumPy предоставляет собой многомерный массив чисел (который на самом деле является объектом). Давайте рассмотрим приведенный ниже пример:
Как видите, класс массива NumPy называется ndarray.
Как создать массив NumPy?
Существует несколько способов создания массивов NumPy.
Массив целых чисел, чисел с плавающей точкой и составных чисел
Когда вы запустите эту программу, результат будет следующий:
Массив нулей и единиц
Здесь мы указали dtype — 32 бита (4 байта). Следовательно, этот массив может принимать значения от -2 -31 до 2 -31 -1.
Использование arange() и shape()
Узнайте больше о других способах создания массива NumPy .
Операции с матрицами
Выше мы привели пример сложение, умножение матриц и транспонирование матрицы. Мы использовали вложенные списки, прежде чем создавать эти программы. Рассмотрим, как выполнить ту же задачу, используя массив NumPy.
Сложение двух матриц
Мы используем оператор +, чтобы сложить соответствующие элементы двух матриц NumPy.
Умножение двух матриц
Чтобы умножить две матрицы, мы используем метод dot(). Узнайте больше о том, как работает numpy.dot .
Примечание: * используется для умножения массива (умножения соответствующих элементов двух массивов), а не умножения матрицы.
Транспонирование матрицы
Мы используем numpy.transpose для вычисления транспонирования матрицы.
Как видите, NumPy значительно упростил нашу задачу.
Доступ к элементам матрицы, строкам и столбцам
Доступ к элементам матрицы
Также можно получить доступ к элементам матрицы, используя индекс. Начнем с одномерного массива NumPy.
Когда вы запустите эту программу, результат будет следующий:
Теперь выясним, как получить доступ к элементам двухмерного массива (который в основном представляет собой матрицу).
Когда мы запустим эту программу, результат будет следующий:
Доступ к строкам матрицы
Когда мы запустим эту программу, результат будет следующий:
Доступ к столбцам матрицы
Когда мы запустим эту программу, результат будет следующий:
Если вы не знаете, как работает приведенный выше код, прочтите раздел «Разделение матрицы».
Разделение матрицы
Разделение одномерного массива NumPy аналогично разделению списка. Рассмотрим пример:
Теперь посмотрим, как разделить матрицу.
Использование NumPy вместо вложенных списков значительно упрощает работу с матрицами. Мы рекомендуем детально изучить пакет NumPy, если вы планируете использовать Python для анализа данных.
Данная публикация представляет собой перевод статьи « Python Matrices and NumPy Arrays » , подготовленной дружной командой проекта Интернет-технологии.ру
И снова здравствуйте! Продолжаем наш цикл статей по переводу мана о numpy. Приятного чтения.
Булево сравнение может быть использовано для поэлементного сравнения массивов одинаковых длин. Возвращаемое значение это массив булевых True/False значений:
Результат сравнения может быть сохранен в массиве:
Массивы могут быть сравнены с одиночным значением:
Операторы any и all могут быть использованы для определения истинны ли хотя бы один или все элементы соответственно:
Комбинированные булевы выражения могут быть применены к массивам по принципу элемент — элемент используя специальные функции logical_and, logical_or и logical_not:
Функция where создает новый массив из двух других массивов одинаковых длин используя булев фильтр для выбора межу двумя элементами. Базовый синтаксис: where(boolarray,
truearray, falsearray):
С функцией where так же может быть реализовано «массовое сравнение»:
Некоторые функции дают возможность тестировать значения в массиве. Функция nonzero возвращает кортеж индексов ненулевых значений. Количество элементов в кортеже равно количеству осей в массиве:
Также можно проверить значения на конечность и NaN(not a number):
Хотя здесь мы использовали константы numpy чтобы добавить значения NaN и бесконечность, они могут быть результатами применения стандартных математических операций.
Мы уже видели, как и у списков, элементы массива можно получить используя операцию доступа по индексу. Однако, в отличии от списков, массивы также позволяют делать выбор элементов используя другие массивы. Это значит, что мы можем использовать массив для фильтрации специфических подмножеств элементов других массивов.
Булевы массивы могут быть использованы как массивы для фильтрации:
Стоит заметить, что когда мы передаем булев массив a>=6 как индекс для операции доступа по индексу массива a, возвращаемый массив будет хранить только True значения. Также мы можем записать массив для фильтрации в переменную:
Более замысловатая фильтрация может быть достигнута использованием булевых выражений:
В придачу к булеву выбору, также можно использовать целочисленные массивы. В этом случае, целочисленный массив хранит индексы элементов, которые будут взяты из массива. Рассмотрим следующий одномерный пример:
Иными словами, когда мы используем b для получения элементов из a, мы берем 0-й, 0-й, 1-й, 3-й, 2-й и 1-й элементы a в этом порядке. Списки также могут быть использованы как массивы для фильтрации:
Для многомерных массивов, нам необходимо передать несколько одномерных целочисленных массивов в оператор доступа индексу (Прим. переводчика: в нашем случае индексы это массивы) для каждой оси. Потом каждый из массивов проходит такую последовательность: первый элемент соответствует индексу строки, который является первым элементом массива b, второй элемент соответствует индексу столбца, который является первым элементом массива c и так далее. (Прим. переводчика: первый массив [2, 2] и второй [1, 4], имеем на выходе элементы с индексами [2, 1] и [2, 4]) Пример:
Специальная функция take доступна для выполнения выборки с целочисленными массивами. Это работает также как и использования оператора взятия по индексу:
Функция take также предоставляет аргумент axis (ось) для взятия подсекции многомерного массива вдоль какой-либо оси. (Прим. переводчика: по строкам или столбцам (для двумерных массивов)).
В противоположность к функции take есть функция put, которая будет брать значения из исходного массива и записывать их на специфические индексы в другом put-массиве.
Заметим, что значение 7 из исходного массива b не было использовано, так как только 2 индекса [0, 3] указаны. Исходный массив будет повторен если необходимо в случае не соответствия длин:
NumPy обеспечивает много функций для работы с векторами и матрицами. Функция dot возвращает скалярное произведение векторов:
Функция dot также может умножать матрицы:
Также можно получить скалярное, тензорное и внешнее произведение матриц и векторов. Заметим, что для векторов внутреннее и скалярное произведение совпадает.
NumPy также предоставляет набор встроенных функций и методов для работы с линейной алгеброй. Это всё можно найти в под-модуле linalg. Этими модулями также можно оперировать с вырожденными и невырожденными матрицами. Определитель матрицы ищется таким образом:
Также можно найти собственный вектор и собственное значение матрицы:
Невырожденная матрица может быть найдена так:
Одиночное разложение (аналог диагонализации не квадратной матрицы) может быть достигнут так:
Заканчиваем третью часть. Удачи и до скорого!