В Python: часть -1
Numpy — это математическая библиотека для Python. Это позволяет нам выполнять вычисления эффективно и результативно. Это лучше, чем обычный Python, потому что у него потрясающие возможности.
Здесь я просто познакомлю вас с основами того, что в основном требуется для машинного обучения и науки о данных. Я не собираюсь описывать все, что возможно с библиотекой NumPy. Это первая часть серии руководств по NumPy.
Первое, с чем я хочу вас познакомить, это способ импорта.
import numpy as np
Хорошо, теперь мы сообщаем python, что «np» — это официальная ссылка на numpy в дальнейшем.
Давайте создадим массив python и массив np.
# python array a = [1,2,3,4,5,6,7,8,9]# numpy array A = np.array([1,2,3,4,5,6,7,8,9])
Если бы я их распечатывал, то особой разницы бы не увидел.
print(a) print(A) ====================================================================[1, 2, 3, 4, 5, 6, 7, 8, 9] [1 2 3 4 5 6 7 8 9]
Хорошо, но почему я должен использовать массив np вместо обычного массива?
Ответ заключается в том, что массивы np лучше с точки зрения более быстрых вычислений и простоты манипулирования.
Подробнее об этих деталях здесь, если вам интересно:
Почему NumPy вместо списков Python?
https://numpy.org/devdocs/user/absolute_beginners.html
Давайте продолжим с более интересными вещами. Подождите, ничего крутого мы еще не видели! Хорошо, вот что:
np.arange()
np.arange(0,10,2) ====================================================================array([0, 2, 4, 6, 8])
Что делает arange([start],stop,[step]) , так это то, что он упорядочивает числа от начала до конца, шаг за шагом. Вот что это означает для np.arange(0,10,2):
вернуть список np, начиная с 0 и заканчивая 10, но не включать 10 и каждый раз увеличивать числа на 2.
Итак, вот что у нас получается:
array([0, 2, 4, 6, 8])
Важно помнить, что номер остановки не будет включен в список.
другой пример:
np.arange(2,29,5) ==================================================================== array([ 2, 7, 12, 17, 22, 27])
Прежде чем я продолжу, я должен предупредить вас, что этот «массив» взаимозаменяемо называется «матрицей» или «вектором». Так что не впадайте в панику, когда я говорю, например, «Форма матрицы 2 X 3». Все это означает, что массив выглядит примерно так:
array([ 2, 7, 12,], [17, 22, 27])
Теперь давайте поговорим о форме массива np по умолчанию.
Форма — это атрибут для массива np. Когда массив по умолчанию, скажем, например A, вызывается с формой, вот как это выглядит.
A = [1, 2, 3, 4, 5, 6, 7, 8, 9] A.shape ==================================================================== (9,)
Это матрица ранга 1 (массив), в которой всего 9 элементов в строке.
В идеале это должна быть матрица 1 X 9, верно?
Я согласен с вами, так что здесь в игру вступает функция reshape(). Это метод, который изменяет размеры вашей исходной матрицы на желаемые размеры.
Давайте посмотрим на изменение формы в действии. Вы можете передать кортеж любого желаемого размера, если измененная матрица и исходная матрица имеют одинаковое количество элементов.
A = [1, 2, 3, 4, 5, 6, 7, 8, 9] A.reshape(1,9) ==================================================================== array([[1, 2, 3, 4, 5, 6, 7, 8, 9]])
Обратите внимание, что reshape возвращает многомерную матрицу. На это указывают две квадратные скобки в начале. [[1, 2, 3, 4, 5, 6, 7, 8, 9]] является потенциально многомерной матрицей, в отличие от [1, 2, 3, 4, 5, 6, 7, 8, 9] .
Другой пример:
B = [1, 2, 3, 4, 5, 6, 7, 8, 9] B.reshape(3,3) ==================================================================== array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Если я посмотрю на форму B, она будет (3,3):
B.shape ==================================================================== (3,3)
Идеальный. Перейдем к np.zeros().
На этот раз ваша задача рассказать мне, что происходит, глядя на этот код:
np.zeros((4,3)) ==================================================================== ???????????
Хорошо, если вы думали, что он напечатает матрицу 4 X 3, заполненную нулями. Вот результат:
np.zeros((4,3)) ==================================================================== array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]])
np.zeros((n,m)) возвращает матрицу n x m, содержащую нули. Это так просто.
Давайте еще раз подумаем: что делает np.eye()?
Подсказка: eye() означает Identity.
np.eye(5) ==================================================================== array([[ 1., 0., 0., 0., 0.], [ 0., 1., 0., 0., 0.], [ 0., 0., 1., 0., 0.], [ 0., 0., 0., 1., 0.], [ 0., 0., 0., 0., 1.]])
np.eye() возвращает матрицу идентичности с указанными размерами.
Что если нам нужно перемножить 2 матрицы?
Нет проблем, у нас есть np.dot().
np.dot() выполняет умножение матриц при условии, что обе матрицы «умножаемы». Это просто означает, что количество столбцов первой матрицы должно совпадать с количеством строк во второй матрице.
пример: А = (2,3) и В = (3,2). Здесь количество столбцов в A = 3. Количество строк в B = 3. Поскольку они совпадают, умножение возможно.
Давайте проиллюстрируем умножение с помощью кода np:
# generate an identity matrix of (3 x 3) I = np.eye(3) I ==================================================================== array([[ 1., 0., 0.], [ 0., 1., 0.], [ 0., 0., 1.]])# generate another (3 x 3) matrix to be multiplied. D = np.arange(1,10).reshape(3,3) D ==================================================================== array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
Теперь мы подготовили обе матрицы для перемножения. Давайте посмотрим на них в действии.
# perform actual dot product. M = np.dot(D,I) M ==================================================================== array([[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.]])
Большой! Теперь вы знаете, как просто и возможно перемножать матрицы! Также обратите внимание, что весь массив теперь имеет тип float.
Как насчет добавления элементов матрицы?
# add all the elements of matrix. sum_val = np.sum(M) sum_val ==================================================================== 45.0
np.sum() добавляет все элементы матрицы.
Однако есть 2 варианта.
1. Суммируем по строкам.
# sum along the rows np.sum(M,axis=1) ==================================================================== array([ 6., 15., 24.])
6 - это сумма 1-й строки (1, 2, 3).
15 — это сумма 2-го ряда (4, 5, 6).
24 — это сумма 3-го ряда (7, 8, 9).
2. Суммируем по столбцам.
# sum along the cols np.sum(M,axis=0) ==================================================================== array([ 12., 15., 18.])
12 - это сумма 1-го столбца (1, 4, 7).
15 - это сумма 2-го столбца (2, 5, 8).
18 — это сумма 3-го столбца (3, 6, 9).