Эта статья возникла из личного публичного аккаунта:TechFlow, оригинальность это не просто, прошу внимания
Сегоднятупые темыВ шестой статье давайте взглянем на остальную часть библиотеки Numpy.
постоянство массива
Когда мы проводим исследования или изучаем модели машинного обучения, после завершения обучения иногда мыНадеемся, что сможем сохранить соответствующие параметры. В противном случае, если в Блокноте, эти значения теряются при закрытии Блокнота. Общее решение - поставить нужное нам значение или массив"Упорство", который обычно хранится на диске.
Чтение и запись файлов в Python немного хлопотны, нам также нужно создать дескриптор файла, а затем писать построчно, после записи нам нужно закрыть дескриптор. Даже использование оператора with по-прежнему недостаточно просто. В ответ на эту проблему numpy поставляется с API для записи файлов, который мы можем вызывать напрямую.
Файл, сохраненный numpy,двоичный формат, поэтому мы не можем прочитать содержимое, даже если оно открыто принудительно, оно будет искажено.
Хранение данных в двоичной форме позволяет избежать процесса преобразования типа данных, особенно базовые данные numpy реализованы на C ++, Если используется файловый интерфейс Python, его необходимо сначала преобразовать в формат Python, что приведет к большим накладным расходам. Так как его можно сохранить и естественно прочитать, мы можем вызвать numpy'sфункция нагрузкиПрочитайте в файле numpy.
Следует отметить, что мы не добавляли суффикс файла при сохранении, numpy автоматически добавит суффикс за нас, ноПри чтении необходимо указывать полное имя файла, иначе numpy не сможет его найти, и будет сообщено об ошибке.
Мало того, numpy поддерживает насСохранение нескольких массивов одновременнов файл.
Мы используем savez для его завершения.В этом API мы передаем a=arr, b=arr, что на самом делесловарная формавходящий. В файле numpy сопоставляет имена переменных со значениями массива. Таким образом, когда мы читаем, мы можем получить доступ к соответствующему значению через имя переменной.
Если данные, которые нужно сохранить, очень велики, мы также можемсжимать данные, нам просто нужно заменить savez на savez_compressed.
Линейная алгебра
В дополнение к научным вычислениям, еще одна мощная функция Numpy заключается в том, чтоПоддержка матричных операций, что является одной из причин его популярности и популярности в машинном обучении. Мы упомянули некоторые приложения Numpy в предыдущей статье о линейной алгебре, а сегодня мы обобщим некоторые часто используемые интерфейсы линейной алгебры в этой статье.
скалярное произведение
Говоря о матричном скалярном произведении, следуетНаиболее часто используемый API генерации строкНапример, в нейронной сети, если функция активации игнорируется, влияние слоя нейронов на текущие данные фактически эквивалентно умножению матрицы признаков на матрицу коэффициентов. Другой пример: в логистической регрессии, когда мы вычисляем взвешенную сумму выборок, это также достигается матричным скалярным произведением.
В классе глубокого обучения Эндрю однажды сделал такую реализацию, выполняя операции умножения матриц над двумя огромными матрицами. Один реализуется через цикл Python, а другой реализуется через функцию точки Numpy.Стоимость времени у них разная в сто раз.. Разрыв в эффективности связан с характеристиками языка Python и возможностями параллелизма, поэтому в области машинного обучения мы всегда векторизируем или матрируем выборки, вычисляем взвешенную сумму путем умножения точек или умножаем коэффициенты.
В Numpy мы используем функцию dot для вычисления скалярного произведения двух матриц, которое можно записать как a.dot(b) или np.dot(a, b). Вообще говоря, я предпочитаю первое, потому что так удобнее и понятнее писать. Это не имеет большого значения, если вам нравится последний, это просто личное предпочтение.
Будьте осторожны, чтобы не написать *, этот символПредставляет попарное умножение двух матричных элементоввместо скалярного произведения. Это эквивалентно функции умножения в np.
Транспонирование и обратная матрица
Транспонирование, о котором мы упоминали в предыдущей статье, это можно сделать с помощью .T или np.transpose.
Numpy также предоставляетРешить обратную матрицуРабота этой функции осуществляется по пути linalg numpy, и многие часто используемые функции линейной алгебры реализованы по этому пути. Согласно знаниям в линейной алгебре, только квадратные матрицы полного ранга имеют обратные матрицы. Мы можем судить, вычислив сначала определитель по numpy.linalg.det, иначе при прямом вызове будет сообщено об ошибке для матрицы без обратной матрицы.
В этом примере, поскольку определитель матрицы b равен 0, это означает, что она не имеет полного ранга, поэтому мы получим ошибку, когда будем искать ее обратную матрицу.
Помимо этих функций,linalg также инкапсулирует некоторые другие часто используемые функции.. Например, функция qr для разложения qr, функция svd для разложения по сингулярным числам, функция решения для решения линейных уравнений и т. д. Напротив, частота использования этих функций относительно нечаста, поэтому мы не будем вводить их одну за другой, а подробно изучим их, когда сможем их использовать.
случайный
Другое распространенное поле в Numpy — это случайные числа.Numpy часто используется для генерации различных случайных чисел.. На самом деле, в Numpy есть много API и сложных применений, Точно так же мы не вдаемся слишком глубоко, выбираем, что важнее и часто используется, чтобы поделиться с вами.
Все функции случайных чисел находятся в пути numpy.random, для упрощения не будем писать полный путь, просто запомните его.
randn
Мы часто видим эту функцию в коде, особенно при создании данных. Он представляет собой создание пакета на основе входной формы.Нормальное распределение со средним значением 0 и стандартным отклонением 1.случайных чисел.
Следует отметить, что форма, которую мы передаем, — это не кортеж, а размер каждого измерения,Это не то же самое, что использование в других местах, нужно обратить внимание. В дополнение к randn нормального распределения есть униформа равномерного распределения и гамма Гамма-распределения, а также хи-квадрат распределения хи-квадрат.
normal
Нормальное на самом деле является выборочным значением, которое генерирует нормальное распределение, но разница в том,Это позволяет нам указать среднее значение и стандартное отклонение выборки.. Если мы хотим сгенерировать несколько образцов, мы также можем передать указанную форму в параметре размера.
randint
Как следует из названия, эта функция используется для генерации случайных целых чисел. Он принимает верхние и нижние границы для входящих случайных чисел,По крайней мере, одна верхняя граница должна быть передана в(Нижняя граница по умолчанию равна 0).
Если мы хотим сгенерировать несколько целых чисел, мы можем передать фигуру в параметре размера, и он вернет массив соответствующего размера, что совпадает с использованием юниформ.
shuffle
Функция перемешивания естьПеремешать массив, который возвращает результат не по порядку. Обычно используется в машинном обучении, если есть группа образцов, мы обычно используем перетасовку, чтобы перетасовать порядок, чтобы избежать влияния распределения выборки на модель.
shuffle — это метод на месте, который изменяет исходное значение, не возвращая новое значение.
choice
Это также очень часто используемый API, который может извлекать определенные фрагменты данных из данных.
Но он поддерживает только одномерные массивы, обычно используемые при пакетном обучении.Выборка нижнего индекса выборки по выбору, а затем используйте индекс массива, чтобы найти значение этих выборок. Например:
Суммировать
Сегодня мы изучили использование сохраняемости данных, линейной алгебры и API-интерфейсов, связанных со случайными числами, в Numpy. Из-за нехватки места мыПросто выбрал наиболее часто используемые или более важные обычаи, есть еще несколько относительно непопулярных API и способов использования, если вам интересно, вы можете изучить их самостоятельно, в общем-то, упомянутых в статье способов достаточно.
Сегодня этоПоследняя из темы NumpyТеперь, если вы настаиваете на прочтении всех статей в этой теме, то я считаю, что вы должны иметь глубокое понимание и понимание пакета Numpy, и аплодировать себе. После этого тема Панд будет открыта в четверг, так что следите за обновлениями.
Если вам понравилась эта статья, пожалуйстаобращать внимание, подбодрите меня и облегчите доступ к другим статьям.
В этой статье используетсяmdniceнабор текста