Инициализация массива NumPy одинаковыми значениями

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для инициализации массива NumPy константным значением используйте функцию np.full(). В функцию нужно передать размерность массива shape и значение fill_value.

Python
Скопировать код
import numpy as np

array = np.full((2, 2), 9)

Следующим шагом будет создание массива [[9 9] [9 9]], состоящего из двух пар одинаковых чисел!

Кинга Идем в IT: пошаговый план для смены профессии

Другие способы: изобилие вариантов!

Пустой массив, который на самом деле не пустой? [Как кошка Шрёдингера 😉]

Большие массивы можно инициализировать быстро и эффективно при помощи комбинации np.empty() и fill():

Python
Скопировать код
large_array = np.empty((10, 10))
large_array.fill(7)

Сначала создаётся массив c выделенной памятью без инициализации np.empty(), а затем мгновенно заполняется "семёрками".

Срезы всегда под рукой: [Но это не пицца, это массив!]

Python
Скопировать код
array = np.empty((2, 2))
array[:] = 9

Этот способ подходит для массивов среднего размера. Он позволяет инициализировать все элементы за одну операцию.

Барьер для None: [Что не существует, но всё же есть]

Во время работы с None этот метод пригодится:

Python
Скопировать код
array_with_none = np.full((3, 3), None, dtype=object)

Так, вы получаете массив, адекватно обрабатывающий значения None.

Краткий экскурс по производительности

Broadcasting во имя скорости: мгновенное клонирование!

Python
Скопировать код
array_broadcasted = np.zeros((5, 5)) + 8

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

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

Таблица сравнения методов

МетодОптимальные условияИнициализация массиваПроизводительность
np.full()Любые размеры массиваОдновременнаяВысокая
np.empty().fill()Большие массивыДвухэтапнаяОчень высокая
Срезы [:]Средние размеры массиваОдновременнаяВысокая
Циклы/np.repeat()Не рекомендуетсяПоследовательнаяНизкая

Да, np.empty().fill() — это самый быстрый метод! Нет, мы не раздаём черепах!

Важные детали: типы данных и значения

Помните о важности типов данных (dtype), особенно при работе с массивами объектов или сложными структурами.

Визуализация

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

До: [🔒, 🔒, 🔒, 🔒, 🔒] После: [💰, 💰, 💰, 💰, 💰]

Команда np.full() в NumPy делает именно так:

Python
Скопировать код
import numpy as np
lockers = np.full((1, 5), '💰')

Вуаля — теперь каждая ячейка заполнена, и для этого совершенно не нужно ждать!

Практические советы и лайфхаки

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

Настраиваем размеры: синхронизация габаритов:

Python
Скопировать код
other_array = np.random.rand(3, 4)
matching_array = np.full(other_array.shape, 3.14)

Создавайте массивы с размерностью, совпадающей с другими массивами – это пригодится во множестве случаев.

Когда скорость важна: оптимизация процессов

Если критична скорость, попробуйте экспериментировать с различными методами инициализации, чтобы найти оптимальное сочетание скорости выполнения и эффективности использования памяти.

Полезные материалы

  1. numpy.full — официальное руководство NumPy v1.26
  2. Расчёт корреляции Пирсона и значимости в Python – Stack Overflow
  3. Программирование с NumPy без циклов – Real Python
  4. Комплексное руководство по NumPy для Python – YouTube
  5. Введение в NumPy | Руководство по науке о данных с Python
  6. Объект массива NumPy — лекционные заметки Scipy