В Части 1 этого учебника по Numpy мы узнали об основах варианта использования Numpy для машинного обучения. Теперь, когда мы закончили с основами, давайте продолжим наш путь к тому, чтобы стать профессионалом.

Некоторые распространенные массивы Numpy

Давайте поговорим о том, как создать какой-нибудь общий массив numpy, который часто используется в Data Manipulation. Начиная с нуля, как мы можем сделать массив, заполненный всеми нулями. Ну, это легко, см. Пример ниже.

a = np.zeros((3,3)) a

Вывод приведенного выше кода будет выглядеть так

array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])

Теперь то, что вы думаете, было бы способом заполнить массив единицами. Попробуйте это сами. Если вы не поняли это, см. ниже код

Результат будет

Вы можете попробовать любую форму, поэтому, если вам нужна матрица размером 2 × 3, вы просто передаете 2 × 3 в качестве параметра в np.ones(). Также вы, возможно, заметили, что по умолчанию как np.zeros, так и np.ones дают матрицу, где все элементы являются плавающими. Но вы можете изменить этот тип данных. См. ниже пример

a = np.ones((4,3), dtype="int") a

Результат будет выглядеть

array([[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]])

Как и ожидалось, есть 4 строки и 3 столбца, каждое из которых равно 1 (не 1,0). Вы можете проверить тип данных любого массива, используя метод dtype

b = np.array([1,2,3]) print(b.dtype)

Вывод

Я думаю, что пропустил рассказ о функции Numpy linspace для создания массива в части 1, поэтому давайте рассмотрим ее здесь.

Предположим, нам нужно 8 равноудаленных точек между 1 и 5 в виде массива. Мы можем создать такой массив, используя np.linspace(start_point, end_point, количество точек). Обратите внимание, что в функции linspace обе точки start_point и end_point включены. Рассмотрим пример ниже

a = np.linspace(1,5,8) a

Выход будет

array([1. , 1.57142857, 2.14285714, 2.71428571, 3.28571429, 3.85714286, 4.42857143, 5. ])

Как мы можем забыть матрицу идентичности, вспомнить ту матрицу, в которой 1 были диагональными элементами, а все остальные элементы - 0. Вот как вы можете создать матрицу идентичности, используя Numpy

Вот вывод того же

array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])

Мудрые операции с элементами в массиве Numpy

Помните, когда мы первоначально обсуждали преимущества массива Numpy по сравнению со списком Python в Части 1 этой серии блогов, мы говорили, что Numpy более эффективно использует память и быстрее, чем список Python. Еще одно преимущество, которое Numpy имеет по сравнению со списком Python, — это простота, с которой вы можете выполнять числовые вычисления. Давайте возьмем пример. Предположим, нам нужно добавить 1 к каждому элементу в списке Python. Вот как бы мы это сделали

List1 = [1,5,7,3] for i in range(4): List1[i] = List1[i] + 1 print(List1)

Результат, как и ожидалось, будет

Как вы видели, нам потребовалось использовать цикл For для добавления 1 к каждому элементу в списке Python. Мы можем работать только с элементами списка Python, сначала извлекая их, а затем применяя требуемую числовую операцию. Теперь давайте рассмотрим соответствующую реализацию массива Numpy того же

Array1 = np.array([1,5,7,3]) print(Array1 + 1)

Результат будет

Numpy Array позволяет с легкостью выполнять поэлементные операции. Давайте посмотрим еще несколько примеров

Array2 = np.array([1,3,8]) - 3 #Subtracting 3 from each element in array Array2

Результат того же будет

Array2 = np.array([1,3,8]) - 3 #Subtracting 3 from each element in array print(Array2) Array3 = np.array([1,4,7]) * 4 print(Array3) Array4 = np.array([2,4,6]) / 3 print(Array4)

Результатом этого будет

[-2 0 5] [ 4 16 28] [0.66666667 1.33333333 2. ]

До сих пор мы только что выполняли скалярное сложение, вычитание, умножение и деление, но как насчет операций между двумя векторами/матрицами?

Array1 = np.array([1,2,3,4]) Array2 = np.array([2,3,4,5]) Array3 = Array2 + Array1 Array4 = Array2 - Array1 Array5 = Array2 * Array1 Array6 = Array2/Array1 print(Array3) print(Array4) print(Array5) print(Array6)

Попробуйте приведенный выше код в блокноте jupyter или любой другой IDE для python, например Spyder или PyCharm. Вы получите следующий вывод

[3 5 7 9] [1 1 1 1] [ 2 6 12 20] [2. 1.5 1.33333333 1.25

Числовые значения в двухмерном или более высоком измерении следуют той же схеме. Рассмотрим две двумерные матрицы для сложения.

Array1 = np.array([[1,2],[3,4]]) Array2 = np.array([[5,6],[7,8]]) Array3 = Array2 + Array1 print(Array3)

Результат, как и ожидалось, будет

Остерегайтесь несоответствия формы между двумя массивами, поскольку одно и то же может привести к ошибке несоответствия формы. Рассмотрим следующие два примера

Array1 = np.array([1,2,3,4]) Array2 = np.array([1,2,3]) Array1 + Array2

Выполняя приведенный выше код, вы получите следующую ошибку

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-17-8d2dd3937cba> in <module>() 1 Array1 = np.array([1,2,3,4]) 2 Array2 = np.array([1,2,3]) ----> 3 Array1 + Array2 ValueError: operands could not be broadcast together with shapes (4,) (3,)

Двумерный массив в случае

Array3 = np.array([[1,5],[3,2]]) Array4 = np.array([[4,5,7],[1,8,9]]) Array3 + Array4
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-18-44122b5a73b8> in <module>() 1 Array3 = np.array([[1,5],[3,2]]) 2 Array4 = np.array([[4,5,7],[1,8,9]]) ----> 3 Array3 + Array4 ValueError: operands could not be broadcast together with shapes (2,2) (2,3

Обратите внимание, что в обоих случаях ошибка возникает из-за несоответствия формы. Также обратите внимание на последнюю строку с ошибкой, говорящую не удалось транслировать вместе. Вещание — одна из основных концепций Numpy. Я подробно расскажу о трансляции в Часть 3 учебника по Numpy.

Теперь давайте посмотрим, как создать массив случайных чисел с помощью Numpy.

Чтобы создать массив случайных чисел, мы можем использовать случайную функцию Numpy. Есть три разные версии этого генератора случайных чисел, которые мы можем использовать. Начнем с функции np.random.rand(). См. пример ниже.

a = np.random.rand(5) #Generate an array of five number each between 0 and 1 a

Это создаст массив из 5 равномерно распределенных случайных чисел, каждое из которых находится в диапазоне от 0 до 1. Вывод приведенного выше кода:

array([0.80744755, 0.19132711, 0.32847638, 0.1848516 , 0.98184992])

Мы также можем создать многомерный массив случайных чисел.

b = np.random.rand(2,3) b

Вывод

array([[0.33322758, 0.49234151, 0.64642698], [0.87607295, 0.4012065 , 0.53884269]])

Теперь давайте рассмотрим второй метод генерации случайных чисел с использованием функции np.random.randn(). Эта функция работает точно так же, как предыдущая функция, с той лишь разницей, что функция randn() приводит к гауссовскому/нормальному распределению случайных чисел, тогда как функция rand() приводит к равномерно распределенным случайным числам. Ниже приведен пример функции randn().

c = np.random.randn(4,2) c

Вывод

array([[ 0.16361096, 0.318634 ], [ 0.37518563, -1.20985709], [ 0.45028088, -0.10102326], [-0.07006033, -0.36015413]])

Обратите внимание, что здесь мы также получаем отрицательные числа, это связано с тем, что случайное число, сгенерированное функцией randn(), обычно распределяется со средним значением 0 и дисперсией равной 1, и, следовательно, некоторые числа могут быть отрицательными, пока среднее значение равно 0. .

Теперь давайте посмотрим на последний метод генерации случайных чисел в Numpy. Функцию np.random.randint() можно использовать для генерации случайных целых чисел в заданном диапазоне. Давайте посмотрим пример понять.

d = np.random.randint(2,8,5) d

Вывод

array([4, 7, 5, 4, 5])

np.random.randint(lower_bound, upper_bound, количество точек) имеет три параметра: нижний_граунд, который является включающим, верхний_граунд, который является исключительным, и, наконец, общее количество случайных чисел, которые необходимо сгенерировать.

Надеюсь, вам понравилась эта статья, если да, не забудьте аплодировать статье, чтобы она дошла и до других, также вы можете ознакомиться с частью 3 этой серии руководств, в которой мы рассмотрим некоторые дополнительные Непонятные темы.

Первоначально опубликовано на https://rishabhchandel.com 22 июня 2019 г.