предисловие
В предыдущей статье мы получили общее представление о Numpy и узнали о нескольких методах создания ndarray, его индексации и нарезке связанного содержимого, а также о некоторых операциях по изменению оси. Сегодня мы более подробно рассмотрим связанные операции Numpy.
Универсальная функция
Универсальные функции, также известные как ufuncs, — это функции, которые выполняют поэлементные операции с данными ndarray.Существует множество ufuncs, представляющих собой простые поэлементные преобразования.Они называются унарными универсальными функциями, такими как функции sqrt или exp. Операции с квадратами и показатели с основанием e.
код показывает, как показано ниже
import numpy as np
arr = np.arange(10)
print(arr)
print(np.sqrt(arr))
print(np.exp(arr))
Результат выглядит следующим образом
[0 1 2 3 4 5 6 7 8 9]
[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
[1.00000000e+00 2.71828183e+00 7.38905610e+00 2.00855369e+01
5.45981500e+01 1.48413159e+02 4.03428793e+02 1.09663316e+03
2.98095799e+03 8.10308393e+03]
Бинарная универсальная функция принимает два массива в качестве аргументов и в результате возвращает массив. Например добавить, максимум. максимум вычисляет два
код показывает, как показано ниже
import numpy as np
arr1 = np.random.randn(8)
arr2 = np.random.randn(8)
print(arr1)
print(arr2)
print(np.add(arr1, arr2))
print(np.maximum(arr1, arr2))
Результат выглядит следующим образом
[-0.87594347 -0.12273679 -0.14468199 0.79499301 0.48304519 1.42611994
0.18478049 -0.77634734]
[-1.22720664 -0.5021539 -0.46341915 -1.09360896 -0.11567866 1.44262963
1.3676035 0.87728414]
[-2.10315011 -0.62489069 -0.60810113 -0.29861595 0.36736653 2.86874957
1.55238399 0.1009368 ]
[-0.87594347 -0.12273679 -0.14468199 0.79499301 0.48304519 1.44262963
1.3676035 0.87728414]
Обычно используемые общие функции следующие:
унарная общая функция
Имя функции | описывать |
---|---|
abs | Рассчитать абсолютное значение |
aqrt | Вычислить квадратный корень (эквивалентно arr**0,5) |
square | Вычислить квадрат (эквивалентно arr**2) |
Двоичная универсальная функция
Имя функции | описывать |
---|---|
add | добавить |
subtract | Во втором массиве удалите элементы, содержащиеся в первых данных |
multiply | Умножить элементы массива |
разделить, floor_divide | Разделить или разделить |
power | Поднимите значение второго массива в степень первого массива |
maximum, fmax | Вычислить максимальное значение, fmax игнорирует NaN |
минимум, фмин | Вычислить минимальное значение, fmin игнорирует NaN |
mod | по модулю |
Массивно-ориентированное программирование
Использование массивов NumPy позволяет выполнять различные задачи по обработке данных с помощью простых выражений массива без написания большого количества циклов. Этот метод использования выражений массива вместо явных циклов называется векторизацией.
В NumPy np.where — это векторизованная версия троичного выражения x if condition else y. Типичное использование where в анализе данных — создание нового массива из массива. Например, если вы хотите заменить все положительные значения в массиве на 2, а все отрицательные значения на -2, использовать where будет очень просто, пример следующий.
import numpy as np
arr = np.random.randn(4, 4)
arr1 = np.where(arr > 0, 2, -2)
print(arr)
print(arr1)
Результат выглядит следующим образом
[[-0.96494491 0.07379061 -1.27861559 1.00250552]
[ 1.92868117 -0.71947891 -0.46209623 -0.25288092]
[ 0.02809471 0.0156134 -0.41930177 0.4971246 ]
[ 2.34854456 0.53715659 1.29290707 -1.5782504 ]]
[[-2 2 -2 2]
[ 2 -2 -2 -2]
[ 2 2 -2 2]
[ 2 2 2 -2]]
Математические и статистические методы
Многие математические функции для вычисления статистики всего массива или аксиальных данных могут вызываться как методы типа массива, а также функции NumPy верхнего уровня. Пример следующий, mean — это функция для усреднения.
код показывает, как показано ниже
import numpy as np
arr = np.random.randn(5, 4)
print(arr)
print(arr.mean())
print(np.mean(arr))
Результат выглядит следующим образом
[[ 1.24215748 0.29118319 -0.15095341 -1.18315436]
[ 0.34114254 0.67807088 -0.35850545 -0.0283722 ]
[ 0.49374135 2.20303723 1.16090384 0.48882664]
[ 0.7933995 -0.87707374 1.16431334 -0.9578789 ]
[-0.96946034 0.80809035 1.2987827 -0.18680409]]
0.3125723270734698
0.3125723270734698
Такие функции, как среднее, сумма и т. д., могут получать необязательную ось параметров, которую можно использовать для вычисления статистического значения вверх по фиксированной оси, формируя массив вниз на одно измерение, например, arr.mean(1) означает вычисление среднего значения. каждого столбца, arr.sum(0) означает вычисление суммы каждой строки.
код показывает, как показано ниже
import numpy as np
arr = np.random.randn(5, 4)
print(arr)
print(arr.mean(1))
print(arr.sum(0))
Результат выглядит следующим образом
[[ 0.73681373 -0.47219867 -1.79257559 0.61201661]
[-0.36828573 -0.94568274 0.19655693 -0.51870822]
[-2.28839471 0.1913941 0.45310426 0.72263832]
[ 0.78532131 0.86428249 -0.7225563 -0.6953199 ]
[ 0.71222315 0.2859414 1.89264378 -0.60046051]]
[-0.22898598 -0.40902994 -0.23031451 0.0579319 0.57258696]
[-0.42232225 -0.07626342 0.02717308 -0.47983371]
Основные методы статистики массивов
метод | описывать |
---|---|
sum | Вычислить совокупную сумму всех элементов вдоль оси, и совокупная сумма массива нулевой длины равна 0 |
mean | Среднее математическое, среднее значение массива нулевой длины NaN |
стандарт, вар | Стандартное отклонение и дисперсия |
min, max | Мин и Макс |
argmin, argmax | положение мин и макс |
cumsum | совокупная сумма элементов, начиная с 0 |
cumprod | Накопить от 1 |
Как упоминалось ранее, логические значения приводятся к 1 (Истина) и 0 (Ложь), поэтому сумму часто можно использовать для подсчета количества Истин в логическом массиве.
код показывает, как показано ниже
import numpy as np
arr = np.random.randn(5, 4)
print(arr)
print((arr > 0).sum())
Результат выглядит следующим образом
[[ 6.71705665e-02 1.61629530e-02 1.76841029e+00 4.23138695e-01]
[ 1.12480214e-03 -4.01747051e-01 7.13198516e-01 2.19474387e+00]
[ 1.72505405e+00 -7.08562407e-01 4.29636061e-01 1.03900746e-01]
[-5.64386934e-01 1.94245960e+00 -3.59287169e-01 -1.57861659e+00]
[-2.87704451e-01 -5.07660259e-01 5.56993656e-01 1.28515104e+00]]
13
Уникальные значения и другая логика сбора
Numpy включает в себя некоторые базовые операции над наборами для одномерных ndarrays.Обычно используемый метод — np.unique, который возвращает массив, сформированный путем сортировки уникальных значений в массиве.
код показывает, как показано ниже
import numpy as np
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))
Результат выглядит следующим образом
['Bob' 'Joe' 'Will']
Операции сбора над массивами
метод | описывать |
---|---|
unique(x) | Подсчитайте уникальные значения x и отсортируйте |
intersect1d(x, y) | Вычислить пересечение x и y и отсортировать |
union1d(x, y) | Вычислить объединение x и y и отсортировать |
in1d(x, y) | Вычисляет, содержит ли x значение y, возвращает логическое значение |
setdiff1d(x,y) | Вычислите набор разностей, элементы x, которые находятся в x, но не в y |
setxor1d(x,y) | Вычислить XOR, элементы в x или y, но не в пересечении x, y |
Линейная алгебра
Линейная алгебра, такая как умножение матриц, факторизация, определители и т. д. Квадратные матрицы являются неотъемлемой частью всех библиотек массивов.
метод | описывать |
---|---|
diag | Верните диагональные элементы квадратной матрицы в виде одномерного массива или замените одномерный массив квадратной матрицей. |
dot | матричное скалярное произведение |
trace | Вычислите диагональные элементы и |
det | вычислить определитель матрицы |
eig | Вычислить собственные значения и собственные векторы квадратной матрицы |
inv | Вычислить обратную квадратную матрицу |
svd | сингулярное разложение |
lstsq | Вычислите решение методом наименьших квадратов для Ax = b |
Наконец
Сегодня мы узнали об общих функциях NumPy, программировании, ориентированном на массивы, и некотором содержании, связанном с линейной алгеброй. Чтобы узнать больше интересных статей, вы можете подписаться на официальный аккаунт QStack.