Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Начала использования библиотеки numpy на языке Python
Мы дошли, наконец, до очень мощного математического инструмента - библиотеки numpy. Многие другие библиотеки, например, библиотеки поддержки искусственного интеллекта, используют данную библиотеку в качестве инструмента обработки больших массивов данных. Поскольку материал довольно обширный, то библиотеке numpy будет посвящено несколько статей. Сколько, пока не знаю, но не две и не три.
Установка библиотеки numpy
Начну с того, что установка библиотеки numpy осуществляется обычным образом
pip3 install numpy (или в Windows pip install numpy)
Соотвественно подключение библиотеки
import numpy
или как часто пишут
import numpy as np
Вот в общем то и всё, можно начинать работать.
Задание массива numpy и простой вывод
Надо сказать, что в отличие от списков массивы numpy:
- Однородны, т.е. состоят из элементов одного типа, в отличие от стандартных списков. Python.
- Многомерны, т.е. их размерность заложена в их свойства изначально. И опять же они этим отличаются от списков, многомерность которых фиктивная и основывается на том, что элементом писка также может быть список.
Как вариант массивы numpy задаются из списка (кортеж тоже сгодится).
#!/usr/bin/python3
import numpy as np
arr = np.array([3.12, 1.22, 6.77, 4.44])
print(arr)
arr[0] = 5.44
print(arr)
Результат выполнения программы
[3.12 1.22 6.77 4.44]
[5.44 1.22 6.77 4.44]
Какие выводы можнос сделать из данной программы?
- Ну, как мы видим print хорошо себе понимает массивы numpy;
- Список автоматически переходит в одномерный массив numpy;
- Элементы массива numpy можно легко изменять используя квадратные скобки, нумерация элементов массива идёт с 0.
Размерность массивов numpy
Начну с того, что в numpy есть вообще нульмерные массивы. И ведет они себе в основном как обычные переменные заданного типа.
#!/usr/bin/python3
import numpy as np
arr = np.array(10)
arr = arr**3
print(arr)
Результат выполнения программы
1000
Т.е. arr в программе ведёт себя как обычная переменная целого типа.
Легко можно создавать и массивы больших размерностей. Выше мы уже создавали одномерный массив. Также легко создавать и n-мерные массивы. Ниже создаётся двумерный массив.
#!/usr/bin/python3
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
Результат выполнения программы
[[1 2 3]
[4 5 6]]
Для 3-мерного массива также всё просто
arr = np.array([[[1, 2], [3, 3]], [[4, 5], [6, 6]]])
Размерность массива можно определить с помощью свойства ndim, например
print(arr.ndim)
Тип элементов массива можно определить с помощью свойства dtype.
print(arr.dtype)
Для последнего примера результат будет int64.
Важным методом - свойством является shape. Свойство содержит кортеж, содержащий размеры массива. С помощью него можно менять размерность. Рассмотрим пример.
#!/usr/bin/python3
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
print(arr.shape)
arr1 = arr.flatten()
arr.shape = (6)
print(arr1)
print(arr)
print(arr1.shape)
print(arr.shape)
arr.shape = (3, 2)
print(arr)
print(arr.size)
Результат выполнения программы
[[1 2 3]
[4 5 6]]
(2, 3)
[1 2 3 4 5 6]
[1 2 3 4 5 6]
(6,)
(6,)
[[1 2]
[3 4]
[5 6]]
6
Пояснение к программе
Как видим, shape выдаёт размерность массива, но с помощью shape мы можем менять размерность. Для создания одномерного массива кортеж должен содержать просто количество элементов массива. Создать одномерный массив можно и просто методом flatten(). Наконец количество элементов в любом массиве можно определить с помощью свойства size.
Следует отметить, что в numpy есть важная функция reshape(). По своему воздействию она похожа на свойство shape. Но есть отличие. Она создаёт новый массив, а shape просто меняет существующий без копирования в новую область памяти. Но к функции reshape() мы ещё вернёмся.
Вывод (перебор) элементов массива numpy
Можно по-разному перебирать элементы массивов в библиотеке numpy. Мы уже знаем, что функция print() выводит все элементы массива. Ниже в программе показано еще три способа перебора
#!/usr/bin/python3
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
[print(arr[i][j], end=' ') for j in range(3) for i in range(2)]
print()
[print(it, end=' ') for it in np.nditer(arr)]
print()
[[print(it2, end=' ') for it2 in it1] for it1 in arr]
print()
Результат выполнения программы
1 4 2 5 3 6
1 2 3 4 5 6
1 2 3 4 5 6
Кстати, замечу, что представленные способы перебора элементов массива позволяют также осуществлять поиск элементов с заданным свойством.
Следующая статья о numpy
Ну, пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.