Эта статья возникла из личного публичного аккаунта:TechFlow, оригинальность это не просто, прошу внимания
Сегодняпустая темаВ третьей части поговорим об индексах в numpy.
В конце прошлой статьи мы кратко упомянули об индексах, но не углублялись в них. Причина того, чтобы не углубляться слишком глубоко, также очень проста, потому что индексация в numpy используется во многих случаях, и это не то, как мы думаем, использовать индекс для получения данных, и это будет сделано.
Итак, я разобрал релевантное использование и разделил использование индексов на несколько категорий, давайте рассмотрим их по порядку.
индекс среза
Мы все знакомы с ломтиками,Разделите два числа двоеточием, представляющий верхнюю и нижнюю границы интервала. Таким образом осуществляется доступ ко всем элементам в этом диапазоне.
Мы уже говорили об этом раньше, так что давайте кратко рассмотрим это.
Это срез одномерного массива. Поскольку одномерный массив можно разрезать, то же самоеМногомерные массивы также можно нарезать. Возьмем срез двумерного массива:
Мы сгенерировали массив 3 x 4 2d, а затем получили его данные 1-2 путем нарезки. Поскольку мы нарезаем строки, все данные в этой строке по умолчанию сохраняются.
Если нам не нужны все данные, а нужны только фиксированные данные определенного столбца, мы можем написать это так:
Смысл этой строки кода в том, что для строки мы получаем данные фиксированного второго столбца 1-3 строки, если выразить в виде таблицы, то это будет выглядеть так:
Мы также можем разрезать два измерения одновременно, что может привести к получению более сложных данных:
Данные, полученные при такой нарезке, вероятно, будут такими:
То есть каждое измерение в массиве numpy разделено, и каждое измерение поддерживает срезы. Мы можем нарезать в соответствии с нашими потребностями или исправить индекс, чтобы получить нужный нам фрагмент.
логический индекс
В numpy также есть очень полезный метод индексации, который называетсялогический индекс. Когда мы представили вещание в предыдущей статье, когда мы вычисляем два массива разного размера, numpy автоматически поможет нам транслировать их в тот же размер перед операцией.
И логическое суждение — это на самом деле операция, поэтому, если мы применим логические операции к массивам numpy, мы также получим массив numpy, но это массив numpy типа bool.
Давайте посмотрим на пример:
Мы создаем массив numpy, затем сравниваем его с целым числом 4, numpy передает операцию каждому элементу и возвращает логический массив numpy.
Этот массив типа bool можно использовать в качестве индекса для передачи в другой массив, и будут сохранены только строки со значением bool, равным true.
Мы обнаружили, что сохраняются только данные строки 4 и строки 6, то есть сохраняется номер строки, чье логическое значение равно true. Это очень полезный способ получения данных.Мы можем напрямую поместить условия суждения в индекс для фильтрации данных.Если приложение опытное, это будет очень удобно.
В другом примере, если мы хотим отфильтровать данные в первом столбце двумерных данных, оставьте только данные в первом столбце выше 0,5. Если нам нужно использовать цикл для фильтрации по традиционному методу, но с индексом типа bool, мы можем сделать это всего одной строкой:
arr[arr[:, 0] > 0.5]
Если есть несколько условий, мы можемОбъединение с побитовым И или НЕ. В Python побитовое И или НЕ представлено символами &, |, ~ соответственно.
Например, если мы хотим отфильтровать данные, первый столбец которых больше 0,5, а второй столбец меньше 0,5 в массиве arr, мы можем написать это так:
arr[(arr[:, 0] > 0.5) & (arr[:, 1] < 0.5)]
Если мы хотим найти противоположность этому условию, мы, конечно, можем написать условие суждения в обратном порядке, но его также можно напрямую отрицать с помощью символа ~:
arr[~((arr[:, 0] > 0.5) & (arr[:, 1] < 0.5))]
причудливый индекс
В дополнение к логическому индексированию, numpy также поддерживает своего рода причудливое индексирование.
Так называемый причудливый индекс, означающий, что поддержкаИспользуйте другой массив в качестве индекса для доступа к данным.
Возьмем очень простой пример:
Из приведенного выше примера видно, что мы используем значение в массиве idx в качестве индекса для доступа к данным. И неважно, есть ли повторяющиеся значения, numpy не будет дедуплицировать.
Какая польза от доступа к данным через массив? На самом деле это очень полезно: в процессе машинного обучения мы часто привлекаемвыборкаПроблема. Мы не тренируемся каждый раз с полным объемом данных, иначе это очень медленно, а иногда даже невозможно, потому что объем данных слишком велик. Мы часто извлекаем пакет данных как пакет для обучения, о чем упоминалось в предыдущей статье о пакетном градиентном спуске.
Так как же извлекаются данные партии? Вот как мы извлекаем, мы будем вызывать функцию в np, называемую выбором, которую мы используем для извлечения количества индексов, которые мы указываем, из индексов всех выборок.
После того, как у нас есть массив индексов, мы можем получить все соответствующие данные с причудливым индексом.Если вы видели код глубокого обучения, написанный Даниэлем, он почти всегда реализован таким образом.
Суммировать
Сегодня использование и введение индексов в numpy здесь, Это может быть неочевидно, просто взглянув на введение. Но если вы начнете использовать numpy для обработки данных и реализации модели машинного обучения, я думаю, вы почувствуете простоту использования и мощные функции.Индексная функция очень распространена, тоже очень важно.В последующей библиотеке pandas так же используются настройки и функции индекса в numpy. Поэтому это не только важный базовый навык, но и фундамент для последующего обучения.
Если вам понравилась эта статья, пожалуйстаобращать внимание, подбодрите меня и облегчите доступ к другим статьям.