Различие функций np.array() и np.asarray() в NumPy
Быстрый ответ
Функция np.array()
каждый раз создаёт полную копию данных, в то время как np.asarray()
старается избегать копирования, когда это возможно. Рассмотрим пример для наглядности:
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()
– как способ экономии ресурсов, когда это позволено.
Когда использовать что?
- Хотите обезопасить данные от изменений? Используйте
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()
для сокращения копирования перед выполнением операций:
result = np.asarray(x).sum() # Оптимизируем использование памяти перед суммированием!