Найти в Дзене

NUMPY: Суперсила для анализа данных и машинного обучения 💻⚡️

Если вы работаете с данными или хотите войти в мир машинного обучения, NumPy — это не просто инструмент, это фундамент. Эта библиотека Python делает обработку чисел быстрой, эффективной и мощной. В этой статье мы разберёмся, зачем вам NumPy, как его использовать и покажем несколько практических примеров. NumPy (Numeric Python) создан для работы с многомерными массивами и матрицами чисел. Это база для большинства библиотек Python, включая Pandas, Matplotlib, и даже TensorFlow. Вот почему: Установить библиотеку можно командой: pip install numpy Импортируем её: import numpy as np Теперь погружаемся в магию! NumPy работает с массивами (numpy.ndarray), которые заменяют обычные списки Python. arr = np.array([1, 2, 3, 4, 5])
print(arr) # [1 2 3 4 5] matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix)
# [[1 2 3]
# [4 5 6]] Для инициализации массивов: zeros = np.zeros((2, 3)) # Массив 2x3 из нулей
ones = np.ones((3, 2)) # Массив 3x2 из единиц NumPy упрощает математику до невероятного:
Оглавление

Если вы работаете с данными или хотите войти в мир машинного обучения, NumPy — это не просто инструмент, это фундамент. Эта библиотека Python делает обработку чисел быстрой, эффективной и мощной. В этой статье мы разберёмся, зачем вам NumPy, как его использовать и покажем несколько практических примеров.

Почему NumPy так важен?

NumPy (Numeric Python) создан для работы с многомерными массивами и матрицами чисел. Это база для большинства библиотек Python, включая Pandas, Matplotlib, и даже TensorFlow. Вот почему:

  1. Скорость 🏎️: Работает быстрее обычных списков Python благодаря реализации на C.
  2. Функциональность 🚀: Умеет обрабатывать огромные массивы данных.
  3. Простота ✨: Предоставляет удобный интерфейс для сложных математических операций.

Начало работы с NumPy

Установить библиотеку можно командой:

pip install numpy

Импортируем её:

import numpy as np

Теперь погружаемся в магию!

Создание массивов: Основа NumPy

NumPy работает с массивами (numpy.ndarray), которые заменяют обычные списки Python.

Одномерный массив

arr = np.array([1, 2, 3, 4, 5])
print(arr) # [1 2 3 4 5]

Двумерный массив

matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix)
# [[1 2 3]
# [4 5 6]]

Массив с нулями или единицами

Для инициализации массивов:

zeros = np.zeros((2, 3)) # Массив 2x3 из нулей
ones = np.ones((3, 2)) # Массив 3x2 из единиц

Арифметика с массивами

NumPy упрощает математику до невероятного:

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# Сложение
print(a + b) # [5 7 9]

# Умножение
print(a * b) # [4 10 18]

# Деление
print(b / a) # [4. 2.5 2.]

Мощь индексации и срезов

Работа с массивами становится удобной:

data = np.array([10, 20, 30, 40, 50])
print(data[1:4]) # [20 30 40]

matrix = np.array([[1, 2, 3], [4, 5, 6]])
print(matrix[:, 1]) # Все элементы второго столбца [2 5]

Статистика и агрегаты

С NumPy легко вычислить статистические метрики:

data = np.array([10, 20, 30, 40, 50])

print(np.mean(data)) # Среднее значение: 30.0
print(np.sum(data)) # Сумма: 150
print(np.max(data)) # Максимум: 50

Реальный пример: Обработка данных

Представим, у нас есть массив температур по дням:

temperatures = np.array([15, 18, 20, 22, 19, 25, 30])

# Узнаем среднюю температуру
avg_temp = np.mean(temperatures)
print(f"Средняя температура: {avg_temp}°C") # 21.285714285714285°C

# Найдём дни с температурой выше средней
hot_days = temperatures[temperatures > avg_temp]
print(f"Жаркие дни: {hot_days}") # [22 25 30]

Матричные вычисления: Линейная алгебра

NumPy поддерживает работу с матрицами:

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Умножение матриц
result = np.dot(A, B)
print(result)
# [[19 22]
# [43 50]]

NumPy и графики: Подготовка данных для визуализации

Часто данные из NumPy используются для построения графиков:

import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100) # 100 точек от 0 до 10
y = np.sin(x)

plt.plot(x, y)
plt.title("Синусоида")
plt.show()

Почему NumPy работает быстрее?

NumPy написан на C, что позволяет обрабатывать массивы в десятки раз быстрее стандартных Python-циклов. Вместо того чтобы выполнять операции поэлементно, NumPy обрабатывает данные векторизованно, используя оптимизированные алгоритмы.

Пример сравнения производительности

Давайте сравним выполнение задачи в чистом Python и с использованием NumPy.

Задача: сложить два больших массива

Python (без NumPy):

import time

size = 10**6
list1 = range(size)
list2 = range(size)

start = time.time()
result = [x + y for x, y in zip(list1, list2)]
print(f"Время выполнения (Python): {time.time() - start:.5f} секунд")

NumPy:

import numpy as np

array1 = np.arange(size)
array2 = np.arange(size)

start = time.time()
result = array1 + array2
print(f"Время выполнения (NumPy): {time.time() - start:.5f} секунд")

Результат:

На массиве из миллиона элементов Python выполняет операцию за ~0.15 секунд, тогда как NumPy справляется за ~0.01 секунд. Это в 10-15 раз быстрее!

Используйте векторизацию вместо циклов

Циклы — враги производительности. NumPy позволяет избежать их:

Неправильно:

data = np.array([1, 2, 3, 4])
result = []
for x in data:
result.append(x**2)

Правильно:

data = np.array([1, 2, 3, 4])
result = data**2 # Гораздо быстрее и проще

Используйте np.where для условных операций

NumPy предоставляет удобный способ заменить циклы для условных операций.

Пример:
У нас есть массив температур, и мы хотим заменить значения ниже 0 на 0:

Неправильно:

data = np.array([-5, 10, -3, 7])
result = [0 if x < 0 else x for x in data]

Правильно:

data = np.array([-5, 10, -3, 7])
result = np.where(data < 0, 0, data)

Используйте broadcasting для работы с многомерными массивами

Broadcasting позволяет выполнять операции с массивами разных размеров.

Пример:
Добавим к каждому столбцу матрицы своё значение:

matrix = np.array([[1, 2, 3], [4, 5, 6]])
col_add = np.array([10, 20, 30]) # Массив меньшего размера

result = matrix + col_add
print(result)
# [[11 22 33]
# [14 25 36]]

Избегайте копий массива

Каждый раз, когда вы создаёте новый массив, копируя данные, вы расходуете память и снижаете производительность. Вместо этого используйте ссылки или функции для изменения массива "на месте".

Пример:

data = np.array([1, 2, 3, 4])

# Изменение на месте
data *= 2

Используйте np.einsum для сложных вычислений

Функция np.einsum позволяет эффективно вычислять выражения с несколькими индексами, такие как матричные произведения.

Пример:

A = np.random.rand(100, 200)
B = np.random.rand(200, 300)

# Стандартный способ
result1 = np.dot(A, B)

# Используя np.einsum (даёт больше контроля)
result2 = np.einsum('ij,jk->ik', A, B)

Сравнение времени на больших данных

Для массивов размером 10^7 элементов:

Python (сек) NumPy (сек) Ускорение

Сложение

Python (0.15 сек) NumPy (0.01 сек) Ускорение 15x

Поэлементное умножение

Python (0.20 сек) NumPy (0.01 сек) Ускорение 20x

Вычисление среднего

Python (0.12 сек) NumPy (0.002 сек) Ускорение 60x

Пример анализа данных с NumPy

Допустим, у нас есть массив зарплат сотрудников, и мы хотим проанализировать их.

salaries = np.array([40000, 50000, 60000, 70000, 80000])

# Средняя зарплата
mean_salary = np.mean(salaries)

# Сколько получают выше среднего
above_avg = salaries[salaries > mean_salary]

# Увеличение зарплаты на 10%
increased_salaries = salaries * 1.1

print(f"Средняя зарплата: {mean_salary}")
print(f"Сотрудники с зарплатой выше среднего: {above_avg}")
print(f"Зарплаты после увеличения: {increased_salaries}")

NumPy — это must-have для любого разработчика

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

Если вы хотите прокачать свои навыки анализа данных или машинного обучения, начните с NumPy. И помните: чем лучше вы овладеете этой библиотекой, тем быстрее и эффективнее будут ваши проекты! 🚀

🌐 Сайт TechBrain
👥
ВКонтакте TechBrain
📚
Дзен TechBrain
✈️
Telegram TechBrain
📬
Email TechBrain