Руководство по изучению и внедрению NumPy от начального до продвинутого уровня для исследовательского анализа данных при работе с данными.

Что такое NumPy?

NumPy - это библиотека Python, которая поможет в анализе данных. Он используется людьми, которые занимаются наукой о данных. Это библиотека линейной алгебры, которая имеет привязки к библиотекам C, что делает ее очень быстрой.

Как установить NumPy?

Чтобы установить NumPy с помощью pip:

pip install numpy

Чтобы установить Numpy с помощью Anaconda:

conda установить numpy

Что такое массивы NumPy?

Работая с NumPy в области науки о данных, в основном нам приходится иметь дело с массивами NumPy. Эти массивы бывают двух типов:

  1. Матрицы

Матрицы обычно двумерны, но могут иметь либо одну строку, либо один столбец.

2. Векторы

С другой стороны, векторы строго одномерны.

Как создать массивы NumPy с использованием списков?

→ Импорт библиотеки

>>> import numpy as np

→ Создание списка с последующим преобразованием его в массив с одним измерением.

>>> list1 = [11,23,34,56]
>>> list1
[11, 23, 34, 56]
>>> np.array(list1)
array([11, 23, 34, 56])
>>> array1 = np.array(list1)
>>> array1
array([11, 23, 34, 56])

→ Создание списка списков и преобразование его в массив из двух измерений.

>>> list2 = [[11,22,33],[55,66,77],[88,99,100]]
>>> np.array(list2)
array([[ 11,  22,  33],
       [ 55,  66,  77],
       [ 88,  99, 100]])

Как видно выше, есть два измерения: строки и столбцы. Размер также указывается в количестве скобок, в которые заключен массив. Есть одна круглая скобка и квадратная скобка, заключающая массив, поэтому он двухмерный.

Как создать массивы NumPy с помощью встроенных методов?

→ Создание с использованием метода arange, аналогичного диапазону Python. Аргументы - это значения start, stop и step. Первое значение - «start», оно увеличивается до (stop-1), как и функция диапазона.

>>> np.arange(0,10,1)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> np.arange(0,10,2)
array([0, 2, 4, 6, 8])

→ Создание массива всех нулей.

>>> np.zeros(5)
array([0., 0., 0., 0., 0.])
>>> np.zeros((3,2))
array([[0., 0.],
       [0., 0.],
       [0., 0.]])

→ Создание массива из всех.

>>> np.ones(5)
array([1., 1., 1., 1., 1.])
>>> np.ones((3,2))
array([[1., 1.],
       [1., 1.],
       [1., 1.]])

→ Создание массива, в котором значения расположены равномерно в интервале. Он принимает аргументы: начало, конец, количество значений.

>>> np.linspace(1,20,5)
array([ 1.  ,  5.75, 10.5 , 15.25, 20.  ])

Как видно выше, он возвращает 5 чисел в интервале от 1 до 20, которые расположены равномерно.

→ Создание единичной матрицы.

>>> np.eye(3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

→ Создание массива со случайными числами равномерного распределения (0–1).

>>> np.random.rand(3)
array([0.13426   , 0.22672772, 0.98574852])
>>> np.random.rand(3,2)
array([[0.13636649, 0.3366877 ],
       [0.36993761, 0.02392286],
       [0.20869183, 0.59256244]])

→ Создание массива со случайными числами нормального распределения (с центром вокруг 0).

>>> np.random.randn(3)
array([ 0.71105797, -0.33395766,  0.67756835])
>>> np.random.randn(4,2)
array([[ 1.21447908,  0.6830743 ],
       [-0.28203856,  0.16459752],
       [-0.32451067, -0.1618622 ],
       [-0.9331776 ,  0.6281955 ]])

→ Создание массива со случайными целыми числами с помощью randint (), где аргументы, которые нужно передать, имеют низкий, высокий и размер. Низкое - это включающее, а высокое - исключительное.

>>> np.random.randint(1,50)
49
>>> np.random.randint(1,50,5)
array([27, 43, 44, 39, 16])

Какие атрибуты и методы у NumPy Array?

>>> arr1 = np.arange(10,35)
>>> arr1
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

→ Reshape метод, чтобы преобразовать массив в новую форму.

>>> arr1.reshape(5,5)
array([[10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24],
       [25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34]])

Если при изменении формы матрица не заполнена, будет выдана ошибка. Убедитесь, что количество строк, умноженное на количество столбцов, равно количеству элементов в массиве.

>>> arr1.reshape(3,3)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-26-2c9beb517969> in <module>
----> 1 arr1.reshape(3,3)
ValueError: cannot reshape array of size 25 into shape (3,3)

→ Нахождение максимального и минимального значений в массиве.

>>> arr1
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
>>> arr1.max()
34
>>> arr1.min()
10

Чтобы узнать индекс, в котором присутствует максимальное или минимальное значение, используйте argmax () или argmin ().

>>> arr1.argmax()
24
>>> arr1.argmin()
0

→ shape (), чтобы найти форму массива.

>>> arr1.shape
(25,)

Это означает, что массив является одномерным с 25 элементами.

>>> arr2 = arr1.reshape(5,5)
>>> arr2.shape
(5, 5)

Это означает, что массив является двухмерным и имеет 5 строк и 5 столбцов.

→ Определение типа данных элементов в массиве.

>>> arr1.dtype
dtype('int32')

Как выполнить индексацию и выбор элементов в 1-D массиве NumPy?

>>> arr1
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

→ Использование нотации срезов для выбора элементов из массива.

>>> arr1[3]
13
>>> arr1[1:5]
array([11, 12, 13, 14])

→ Использование нарезки для изменения значений в массиве, т. е. широковещательная передача.

>>> arr1[1:5] = 50
>>> arr1
array([10, 50, 50, 50, 50, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

Теперь давайте нарежем массив и транслируем его. Обратите внимание, как в разрезанном массиве изменились значения, но также и в исходном массиве.

>>> arr2 = arr1[10:15]
>>> arr2
array([20, 21, 22, 23, 24])
>>> arr2[:] = 25
>>> arr2
array([25, 25, 25, 25, 25])
>>> arr1
array([10, 50, 50, 50, 50, 15, 16, 17, 18, 19, 25, 25, 25, 25, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

Чтобы этого избежать, сделайте копию массива, а затем транслируйте.

>>> arr_copy = arr1.copy()
>>> arr_copy
array([10, 50, 50, 50, 50, 15, 16, 17, 18, 19, 25, 25, 25, 25, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
>>> arr_copy[:] = 1
>>> arr_copy
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
>>> arr1
array([10, 50, 50, 50, 50, 15, 16, 17, 18, 19, 25, 25, 25, 25, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])

Как выполнить индексацию и выбор элементов в 2-D NumPy Array?

>>> arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
>>> arr2
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

→ Индексирование с помощью скобок

Для индексации передайте значение строки, а затем значение столбца.

>>> arr2[0][1]
2

Вы также можете использовать обозначение ниже, где значения строки и столбца записываются через запятую.

>>> arr2[0,1]
2

→ Получение части матрицы.

Чтобы получить подматрицу, используйте нарезку. В приведенном ниже примере выберите строки o и 1 и столбцы 1 и 2.

>>> arr2[:2,1:]
array([[2, 3],
       [5, 6]])

Как выполнить условный выбор с использованием логического массива?

>>> arr1
array([10, 50, 50, 50, 50, 15, 16, 17, 18, 19, 25, 25, 25, 25, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
>>> bool_arr = arr1 > 20
>>> bool_arr
array([False,  True,  True,  True,  True, False, False, False, False, False,  True,  True,  True,  True,  True,  True,  True,  True, True,  True,  True,  True,  True,  True,  True])

→ Получение значений, в которых логическое значение равно True.

>>> arr1[bool_arr]
array([50, 50, 50, 50, 25, 25, 25, 25, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34])
>>> arr1[arr1<20]
array([10, 15, 16, 17, 18, 19])

Как выполнять операции с массивом с массивом?

>>> arr3 = np.arange(0,5)
>>> arr3
array([0, 1, 2, 3, 4])

→ Поэлементные операции

>>> arr3 + arr3
array([0, 2, 4, 6, 8])
>>> arr3 - arr3
array([0, 0, 0, 0, 0])
>>> arr3 * arr3
array([ 0,  1,  4,  9, 16])

Как выполнить массив со скалярными операциями?

Скаляр означает только одно число. Поэтому при работе со скалярами и массивами NumPy транслирует скаляр в массив и выполняет поэлементные операции.

>>> arr3
array([0, 1, 2, 3, 4])
>>> arr3 + 5
array([5, 6, 7, 8, 9])
>>> arr3 - 2
array([-2, -1,  0,  1,  2])
>>> arr3 * 3
array([ 0,  3,  6,  9, 12])
>>> arr3 / 6
array([0.        , 0.16666667, 0.33333333, 0.5       , 0.66666667])
>>> arr3 ** 3
array([ 0,  1,  8, 27, 64], dtype=int32)

В python 0/0 выдает ошибку, но в NumPy, когда выполняется 0/0, он выдает предупреждение и возвращает значение NAN (Null).

>>> arr3
array([0, 1, 2, 3, 4])
>>> arr3/arr3
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide
  """Entry point for launching an IPython kernel.
array([nan,  1.,  1.,  1.,  1.])
>>> 1/arr3
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in true_divide
  """Entry point for launching an IPython kernel.
array([       inf, 1.        , 0.5       , 0.33333333, 0.25      ])

Как выполнять универсальные функции массива NumPy?

→ Нахождение квадратного корня из каждого элемента в массиве.

>>> np.sqrt(arr3)
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ])

→ Нахождение экспоненты для каждого элемента в массиве.

>>> np.exp(arr3)
array([ 1.        ,  2.71828183,  7.3890561 , 20.08553692, 54.59815003])

→ Нахождение максимума массива.

>>> arr3.max()
4

→ Тригонометрические функции

>>> np.sin(arr3)
array([ 0.        ,  0.84147098,  0.90929743,  0.14112001, -0.7568025 ])
>>> np.cos(arr3)
array([ 1.        ,  0.54030231, -0.41614684, -0.9899925 , -0.65364362])

→ Логарифмическая функция

>>> np.log(arr3)
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: RuntimeWarning: divide by zero encountered in log
  """Entry point for launching an IPython kernel.
array([      -inf, 0.        , 0.69314718, 1.09861229, 1.38629436])

Более подробную информацию о различных методах и функциях NumPy можно найти в официальной документации здесь.

Обратитесь к записной книжке за кодом здесь.

Книги, на которые следует ссылаться:







Свяжитесь со мной: LinkedIn

Посмотрите другие мои работы: GitHub