Советы автостопщика по эффективному использованию массивов Python NumPy

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

Если вы новичок в NumPy, я настоятельно рекомендую прочитать мой предыдущий пост Автостопом по массивам Python NumPy, чтобы получить общее представление об использовании NumPy.

В этом посте я расскажу о некоторых конкретных советах, приемах и методах, которые помогут вам получить большинство массивов NumPy.

1. Изменение существующих массивов NumPy

В отличие от списков Python, NumPy не имеет функции append(...), что фактически означает, что мы не можем добавлять данные или изменять размер массивов NumPy.

Для изменения размера и / или измерения нам нужно создать новые массивы NumPy, применив служебные функции к старому массиву.

Синтаксически массивы NumPy похожи на списки Python, где мы можем использовать операторы индекса для вставки или изменения данных массивов NumPy. Например, для массива NumPy размером 5 мы можем использовать циклы типа while и for для доступа / изменения / обновления содержимого.

Понятно, что это очень старомодный и нефункциональный способ доступа к данным и управления ими. К счастью, NumPy предоставляет функции массового доступа для одного и того же, которые легко делают то же самое в одной строке. Одна из таких функций - numpy.put(...).

Чтобы показать использование numpy.put(...), мы создадим список Python и скопируем его содержимое в массив NumPy.

Функция numpy.put(...) принимает диапазон, а затем использует его для копирования источника из места назначения. Копия будет ограничена числом, указанным в функции range(..).

В приведенном выше примере, если мы изменим строку np.put(...) как

np.put(np_arr, range(3), py_arr)

Он изменит только первые три элемента np_arr, а все остальное оставит нетронутым

Применимость функции np.put(...) не ограничивается копированием одномерных массивов, но также может использоваться для копирования n-мерных массивов, как показано в приведенном ниже коде.

С помощью функции np.put(...) мы можем предоставить список чисел, однако есть некоторые условия, при которых мы хотим скопировать одни и те же числа во все элементы NumPy. Это похоже на вызов np.zeros(...) или np.ones(...), с той разницей, что наряду с нулем и единицей также могут быть указаны другие номера.

Это достигается вызовом функции np.fill(...).

Какое бы число мы ни указали внутри fill (..), оно будет применяться ко всем элементам массива NumPy, независимо от того, является ли этот массив одномерным или многомерным.

Функция .fill(..) принимает только скалярные значения.

Изображенный здесь пример - dtype=np.int. Это также применимо для всех других типов данных, таких как np.float, np.str, np.object и т. Д.

2. Нарезка массивов NumPy

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

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

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

Например, такой оператор, как np_arr[1:4], означает, что он будет включать указатель → 1, но исключить указатель → 4. Таким образом, это будет эффективно отображать элементы из указателя → 1,2 и 3.

Вот несколько примеров нарезки одномерных массивов и их ожидаемых результатов.

Уникальная функция нарезки, представленная в массивах NumPy, но не может быть использована с списком python, - это возможность изменять несколько элементов массива на месте со значением.

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

Теперь давайте посмотрим на разрезание многомерных массивов. Когда мы разрезаем многомерные массивы, значение левого и правого разделителя остается таким же (например, индекс), но мы расширяем его, используя два набора разделителей, разделенных запятыми, которые представляют строки и столбцы ie

[rows → Start_Index : End_Index, Column → Start_Index : End_Index ]

Вот несколько примеров того, что означает нарезка в случае 2D-массивов.

Аналогично 3D-массиву, нам нужно добавить еще одно значение, разделенное запятыми, для измерения. Вот несколько примеров того же

3. Разделение массивов NumPy

В какой-то момент возникла необходимость разделить массив NumPy n-d на строки и столбцы. Существует несколько функций и способов разделения массивов numpy, но две конкретные функции, которые помогают в разделении массивов NumPy по строкам и столбцам, - это split и hsplit.

  • split используется для разумного разделения строк
  • hsplit используется для разумного разделения столбца

Самый простой способ разбить массивы NumPy - по их размеру. Массив 3 * 4 можно легко разбить на 3 набора списков для строк и 4 набора списков с использованием столбцов. Вот как мы можем сделать то же самое

Мы можем предоставить другое число, отличное от доступного размера для разделения, при условии, что коэффициент кратности позволяет разделение. Например, мы можем разделить столбец массива на 2 набора как

Множественные неравные шпагаты

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

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

Он работает так же, как нарезка, как мы видели выше. На основе индекса, указанного в списке, эти функции разделения будут соответственно нарезать либо строки, либо столбцы.

Предположим, что у нас есть такой же 2D-массив, как показано выше, и я хочу выполнить произвольное разбиение.

Случай - 1: разделите 3 строки на [1] и [2,3]

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

Случай - 2: разделить 4 столбца на [1], [2,3] и [4]

Здесь я хочу разделить столбцы так, чтобы он делился на три, где мы извлекаем первый столбец, затем второй + третий столбец и, наконец, четвертый столбец. Вот как мы это сделаем

Итак, это были несколько советов по NumPy, которые могут помочь вам лучше использовать его.

Вот и все для этой конкретной истории. Подробнее о следующем наборе рассказов.

Спасибо за прочтение…!!!

Дакша