Доброго времени суток, читатели, зрители моего канала 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]).
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.