Руководство по изучению и внедрению NumPy от начального до продвинутого уровня для исследовательского анализа данных при работе с данными.
Что такое NumPy?
NumPy - это библиотека Python, которая поможет в анализе данных. Он используется людьми, которые занимаются наукой о данных. Это библиотека линейной алгебры, которая имеет привязки к библиотекам C, что делает ее очень быстрой.
Как установить NumPy?
Чтобы установить NumPy с помощью pip:
pip install numpy
Чтобы установить Numpy с помощью Anaconda:
conda установить numpy
Что такое массивы NumPy?
Работая с NumPy в области науки о данных, в основном нам приходится иметь дело с массивами NumPy. Эти массивы бывают двух типов:
- Матрицы
Матрицы обычно двумерны, но могут иметь либо одну строку, либо один столбец.
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