Поскольку на этот вопрос перенаправляются другие вопросы, в которых задаются вопросы asanyarray
или другие процедуры создания массива , вероятно, стоит иметь краткое описание того, что делает каждый из них.
Различия главным образом заключаются в том, когда возвращать ввод без изменений, а не в создании нового массива в качестве копии.
array
предлагает широкий спектр опций (большинство других функций - тонкие обертки вокруг него), включая флаги для определения, когда копировать. Полное объяснение займет столько же времени, сколько и документы (см. Создание массива , но вкратце, вот несколько примеров:
Предположим , a
это ndarray
и m
есть matrix
, и они оба имеют dtype
из float32
:
np.array(a)
и np.array(m)
скопирует оба, потому что это поведение по умолчанию.np.array(a, copy=False)
и np.array(m, copy=False)
будет копировать, m
но не a
, потому что m
не является ndarray
.np.array(a, copy=False, subok=True)
и не np.array(m, copy=False, subok=True)
будет копировать ни один, потому что m
это matrix
, который является подклассом ndarray
.np.array(a, dtype=int, copy=False, subok=True)
скопирует оба, потому что dtype
не совместим.Большинство других функций являются тонкими обертками вокруг array
этого элемента управления, когда происходит копирование:
asarray
: Вход будет возвращен не скопированным, если он совместим ndarray
( copy=False
).asanyarray
: Входные данные будут возвращены не скопированными, если они совместимы ndarray
или подкласс типа matrix
( copy=False
, subok=True
).ascontiguousarray
: Ввод будет возвращен не скопированным, если он совместим ndarray
в непрерывном C-порядке ( copy=False
, order='C')
.asfortranarray
: Ввод будет возвращен не скопированным, если он совместим ndarray
в непрерывном порядке Фортрана ( copy=False
, order='F'
).require
: Входные данные будут возвращены не скопированными, если они совместимы с указанной строкой требований.copy
: Ввод всегда копируется.fromiter
: Входные данные обрабатываются как итеративные (например, вы можете создать массив из элементов итератора вместо object
массива с итератором); всегда копируется.Существуют также вспомогательные функции, такие как asarray_chkfinite
(те же правила копирования, что и asarray
, но повышаются, ValueError
если они есть, nan
или inf
значения), и конструкторы для подклассов, таких как matrix
или для особых случаев, таких как массивы записей, и, конечно, фактический ndarray
конструктор (который позволяет создавать массив напрямую. из шагов по буферу).
Определение
asarray
является следующим :Так оно и есть
array
, за исключением того, что у него меньше вариантов, иcopy=False
.array
имеетcopy=True
по умолчанию.Основным отличием является то, что
array
(по умолчанию) будет делать копию объекта, аasarray
не будет без необходимости.источник
array([1, 2, 3])
илиasarray([1, 2, 3])
?[1, 2, 3]
список Python, поэтому необходимо создать копию данных для созданияndarary
. Так что используйтеnp.array
напрямую вместо того,np.asarray
чтобы отправитьcopy=False
параметр вnp.array
. Символcopy=False
игнорируется, если копия должна быть сделана, как в этом случае. Если вы сравните эти два значения%timeit
в IPython, вы увидите разницу для небольших списков, но вряд ли имеет значение, что вы используете для больших списков.np.asanyarray
?asarray
всегда возвращаетndarray
.asanyarray
вернет подкласс,ndarray
если это было передано ему. Например,np.matrix
является подклассомndarray
. Так чтоnp.asanyarray(np.matrix(...))
возвращает ту же матрицу, тогда какnp.asarray(np.matrix(...))
преобразует матрицу вndarray
.Разницу можно продемонстрировать на этом примере:
генерировать матрицу
использовать
numpy.array
для измененияA
. Не работает, потому что вы изменяете копиюиспользовать
numpy.asarray
для измененияA
. Это сработало, потому что вы модифицируетеA
себяНадеюсь это поможет!
источник
Различия упомянуты достаточно четко в документации
array
иasarray
. Различия заключаются в списке аргументов и, следовательно, в зависимости от этих параметров.Определения функций:
и
Следующие аргументы - это аргументы, которые могут быть переданы,
array
а неasarray
как указано в документации:источник
Вот простой пример, который может продемонстрировать разницу.
Основное отличие состоит в том, что массив будет копировать исходные данные и, используя другой объект, мы можем изменить данные в исходном массиве.
Содержимое в массиве (a) остается без изменений, и тем не менее мы можем выполнить любую операцию с данными, используя другой объект, не изменяя содержимое в исходном массиве.
источник
asarray(x)
какarray(x, copy=False)
Используйте,
asarray(x)
если вы хотите убедиться, чтоx
это будет массив до того, как будут выполнены любые другие операции. Еслиx
это уже массив, то копия не будет сделана. Это не приведет к избыточному снижению производительности.Вот пример функции, которая гарантирует, что
x
сначала преобразуется в массив.источник