Для научных вычислений, обработки данных и машинного обучения, где требуются эффективные операции над большими многомерными массивами, стандарт де-факто — это библиотека NumPy. Она предоставляет высокопроизводительный объект ndarray (N-dimensional array).
Python
Import numpy as np
# Создание двумерного массива NumPy
Np_matrix = np. array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
Print("Двумерный массив NumPy:")
Print(np_matrix)
# Доступ к элементам (строка, столбец) - как в списках, так и с использованием срезов NumPy
Print("\nДоступ к элементам NumPy:")
Print(f"Элемент в первой строке, втором столбце (индекс [0][1]): {np_matrix[0, 1]}") # Используем запятую для многомерных индексов
Print(f"Элемент во второй строке, третьем столбце (индекс [1][2]): {np_matrix[1, 2]}")
# Изменение элемента
Np_matrix[0, 0] = 100
Print(f"Измененный элемент [0,0]: {np_matrix[0,0]}")
Print(np_matrix)
# Матричные операции (одно из главных преимуществ NumPy)
Print("\nМатричные операции с NumPy:")
Matrix_b = np. array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])
Print(f"Сложение матриц:\n{np_matrix + matrix_b}")
Print(f"Поэлементное умножение:\n{np_matrix * matrix_b}")
Print(f"Матричное умножение (@ или. dot()):\n{np_matrix @ matrix_b}")
# Создание массивов разных форм
Print("\nСоздание массивов NumPy различными способами:")
Zeros_matrix = np. zeros((2, 3)) # Матрица 2x3 из нулей
Print(f"Матрица из нулей:\n{zeros_matrix}")
Ones_matrix = np. ones((3, 2)) # Матрица 3x2 из единиц
Print(f"Матрица из единиц:\n{ones_matrix}")
Identity_matrix = np. eye(3) # Единичная матрица 3x3
Print(f"Единичная матрица:\n{identity_matrix}")
Random_matrix = np. random. rand(2, 2) # Матрица 2x2 из случайных чисел (0 до 1)
Print(f"Матрица из случайных чисел:\n{random_matrix}")
# Получение формы (размеров) массива
Print(f"\nФорма (размеры) np_matrix: {np_matrix. shape}")
Print(f"Количество измерений: {np_matrix. ndim}")
Print(f"Тип данных элементов: {np_matrix. dtype}")
Плюсы NumPy:
- Производительность: Очень быстро работает с числовыми данными благодаря низкоуровневой реализации на C. Богатый функционал: Предоставляет огромное количество математических функций и операций над массивами (линейная алгебра, статистика, БПФ и т. д.). Экономия памяти: Хранит данные в непрерывных блоках памяти, что более эффективно. Используется повсеместно: Является основой для многих других научных библиотек Python (Pandas, SciPy, Matplotlib, scikit-learn).
Минусы NumPy:
- Необходимо установить: Не входит в стандартную библиотеку Python. Ограничения по типам данных: Все элементы ndarray должны быть одного типа (хотя NumPy умеет автоматически преобразовывать типы).
Выбор между списками списков и NumPy:
- Используйте Списки списков, если вам нужна простая структура для хранения небольшого количества данных, и вы не планируете выполнять сложные численные операции. Это хорошо подходит для общих задач, где каждый "элемент" строки может быть сложным объектом разных типов. Используйте NumPy (ndarray), если вы работаете с числовыми данными, особенно в больших объемах, и вам нужна производительность, математические операции (матричные умножения, транспонирование, инвертирование и т. д.) или вы собираетесь использовать другие научные библиотеки Python.
Для большинства задач машинного обучения, обработки изображений или научных расчетов NumPy является единственным правильным выбором.
Это самый простой и интуитивно понятный способ создания двумерного массива в чистом Python.
Python
# Создание двумерного массива (матрицы 3x3)
Matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
Print("Двумерный массив (список списков):")
Print(matrix)
# Доступ к элементам (строка, столбец)
Print("\nДоступ к элементам:")
Print(f"Элемент в первой строке, втором столбце (индекс [0][1]): {matrix[0][1]}") # Выведет 2
Print(f"Элемент во второй строке, третьем столбце (индекс [1][2]): {matrix[1][2]}") # Выведет 6
# Изменение элемента
Matrix[0][0] = 10
Print(f"Измененный элемент [0][0]: {matrix[0][0]}")
Print(matrix)
# Итерация по элементам
Print("\nИтерация по элементам:")
For row in matrix:
for element in row:
print(element, end=" ")
print() # Переход на новую строку после каждой строки
# Добавление новой строки
Matrix. append([10, 11, 12])
Print("\nМассив после добавления строки:")
Print(matrix)
# Количество строк и столбцов (если все строки одинаковой длины)
Num_rows = len(matrix)
Num_cols = len(matrix[0]) # Предполагаем, что первая строка не пуста
Print(f"\nКоличество строк: {num_rows}")
Print(f"Количество столбцов: {num_cols}")
Плюсы списков списков:
- Простота и гибкость: Легко создавать, понимать и манипулировать. Разные типы данных: Элементы могут быть любого типа и даже иметь разную длину строк (хотя для матриц это обычно нежелательно).
Минусы списков списков:
- Производительность: Неэффективны для больших численных расчетов, так как Python-списки — это, по сути, массивы указателей на объекты, а не непрерывные блоки памяти. Отсутствие встроенных математических операций: Нет прямой поддержки матричных операций (сложение, умножение и т. д.).
Это очень гибкий и распространенный подход, который хорошо работает для большинства задач. Однако для серьезных численных вычислений и работы с большими массивами данных, где важна производительность, предпочтительно использовать библиотеку NumPy.