1K подписчиков

Программирование на языке Python. Библиотека numpy, продолжаем изучать

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Продолжение статей по numpy

Продолжаем изучать библиотеку numpy

Объединение массивов в numpy

Приведём несколько функций, позволяющих объединять массивы. Первый пример - объединение массивов в массив с более высокой размерностью.

#!/usr/bin/python3
import numpy as np
# объединение массивов
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([[7, 8, 9], [10, 11, 12]])
a3 = np.array([[13, 14, 15], [16, 17, 18]])
a = np.stack((a1, a2, a3))
print(a)

Результат выполнения программы

[[[ 1  2  3]
 [ 4  5  6]]

[[ 7  8  9]
 [10 11 12]]

[[13 14 15]
 [16 17 18]]]

Следующие пример позволяют объединять массивы вдоль осей

#!/usr/bin/python3
import numpy as np
# объединение массивов
a1 = np.array([[1, 2, 3], [4, 5, 6]])
a2 = np.array([[7, 8, 9], [10, 11, 12]])
a3 = np.array([[13, 14, 15], [16, 17, 18]])
a = np.concatenate((a1, a2, a3), 0)
b = np.concatenate((a1, a2, a3), 1)
print(a)
print()
print(b)

Результат выполнения программы

[[ 1  2  3]
[ 4  5  6]
[ 7  8  9]
[10 11 12]
[13 14 15]
[16 17 18]]

[[ 1  2  3  7  8  9 13 14 15]
[ 4  5  6 10 11 12 16 17 18]]

В программе выше массивы объединяются по двум осям: 0 и 1.

Ещё о линейной алгебре в numpy

Всё таки линейная алгебра это раздел математики и не простой раздел. Поэтому я выбираю возможности библиотеки numpy, относящиеся в основном к простым и наиболее часто используемым элементам этого раздела математики.

Начнём со скалярного произведения векторов, которое представляет сумму произведений элементов самих на себя одномерного массива.

#!/usr/bin/python3
# скалярное произведение векторов
import numpy as np
a = np.array([3, 4, 5])
b = np.array([1, 2, 3])
print(np.vdot(a, b))

Результат выполнения

26

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

#!/usr/bin/python3
# внешнее произведение векторов
import numpy as np
a = np.array([3, 4, 5])
b = np.array([1, 2, 3])
print(np.outer(a, b))

Результат выполнения программы

[[ 3  6  9]
[ 4  8 12]
[ 5 10 15]]

Наконец рассмотрим получение собственных векторов матрицы и собственных значений этих векторов.

#!/usr/bin/python3
# собственный вектор матрицы
import numpy as np
a = np.array([[3, 4, 5], [1, 2, 3], [6, 7, 8]])
b = np.linalg.eig(a)
print(b)

Результат выполнения

(array([ 1.36589105e+01, 7.50522543e-16, -6.58910532e-01]), array([[-0.48771247, -0.40824829, -0.15449116],
[-0.25654923, 0.81649658, -0.71325965],
[-0.83445733, -0.40824829, 0.68366158]]))

Результат состоит из двух массивов (кортеж). Столбцы второго массива и есть собственные вектора матрицы. Элементы же первого массива собственные значение соответствующих векторов.

Статистика в numpy

Перечислим несколько основных функций numpy, имеющих отношение к статистике: sum - сумма элементов массива или вдоль оси, mean - среднее, std - стандартное отклонение, var - дисперсия, min, max - минимальный и максимальный элементы, argmin, argmax - индексы минимальных и максимальных элементов, cumsum - накопительная сумма массива и сумма по осям, cumprod - накопительное произведение элементов массива и по осям, percentile - вычисление процентиля элемента массива, median -медианное среднее.

#!/usr/bin/python3
import numpy as np
a = np.array([[1, 2, 3], [4, 3, 6], [7, 8, 1]])
print(np.sum(a, axis=0))
print(np.cumsum(a))
print(np.argmax(a))
print(np.median(a))
print(np.percentile(a, 90))

Результат выполнения программы

[12 13 10]
[ 1  3  6 10 13 19 26 34 35]
7
3.0
7.2

Отмечу, что процентиль, это значение, которое отсекает n-й процент элементов массива, если массив отсортирован. Функция percentile() вторым параметром может содержать целый массив значений в промежутке от 0 дол 100. Например np.percentile(a, [90, 20]).

Ну, пока всё!

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

Не нужно стесняться своего кода, нужно стесняться чужого кода в своей программе
Не нужно стесняться своего кода, нужно стесняться чужого кода в своей программе