Различие функций np.array() и np.asarray() в NumPy

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

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

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

Функция np.array() каждый раз создаёт полную копию данных, в то время как np.asarray() старается избегать копирования, когда это возможно. Рассмотрим пример для наглядности:

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

new_array_with_copy = np.array([1, 2, 3])  # np.array() всегда создает полную копию
new_array_no_copy = np.asarray(new_array_with_copy)  # np.asarray() избегает копирования, если это применимо

new_array_with_copy[0] = 99  # Изменяем первый элемент, повлияет ли это на np.asarray()?
print(new_array_no_copy)  # Если выводит [1, 2, 3], то копирование не произошло!

Таким образом, np.array() можно рассматривать как инвестицию в будущее за счёт создания копии, а np.asarray() – как способ экономии ресурсов, когда это позволено.

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

Когда использовать что?

  • Хотите обезопасить данные от изменений? Используйте np.array(), чтобы гарантировать сохранность исходных данных.
  • Заботитесь о памяти? np.asarray() станет вашим выгодным выбором при работе со значительными массивами.
  • Нужны дополнительные параметры? np.array() предлагает множество опций, включая copy, dtype, order.

Что скрывается внутри?

np.asarray() проста и непосредственна: если данные уже представлены массивом, она использует их в соответствующем виде, что делает функцию быстрее и более эффективной с точки зрения использования памяти.

np.array(), в свою очередь, настоящий маг, который обладает широкими возможностями благодаря параметрам dtype, order, copy.

Совет джедаев: Если необходимо убедиться, что в массиве нет nan или inf, воспользуйтесь функцией np.asarray_chkfinite.

Контроль над процедурой копирования

В np.array() вы можете применить параметр copy для управления копированиями данных: True (создать копию) или False (значение по умолчанию). Процедура np.asarray() по умолчанию предполагает copy=False, если иное не указано явно.

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

В сфере высокой производительности, np.asarray() помогает сократить израсходование памяти. Исключение ненужного копирования данных позволяет освободить ресурсы для увеличения производительности.

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

Представьте, что у вас есть комок теста 🍩:

  • np.array() всегда берет новую посуду для теста, подобно кулинарному шоу.
  • np.asarray() оценивает, нужно ли новое блюдо для теста, или можно использовать то, что уже есть.

Специализированные функции

NumPy предлагает в своем распоряжении такие инструменты, как np.ascontiguousarray и np.asfortranarray, создающие массивы с определенной структурой памяти для улучшения производительности.

Практическое применение:

  • Для работы с функциями C/C++ используйте np.ascontiguousarray.
  • Совместимость с библиотекой Fortran обеспечивается с помощью np.asfortranarray.

Удобные функции

NumPy обеспечивает доступ к таким функциям, как np.copy(), чтобы улучшить читабельность кода. np.array(obj, copy=True) может показаться избыточной, но она явно выражает ваше намерение сделать точную копию.

Совет: При использовании np.asarray() для сокращения копирования перед выполнением операций:

Python
Скопировать код
result = np.asarray(x).sum()  # Оптимизируем использование памяти перед суммированием!