问题描述
Numpy的 array()
有什么区别和 asarray()
函数?什么时候应该使用一个而不是另一个?他们似乎为我能想到的所有输入生成了相同的输出.
What is the difference between Numpy's array()
and asarray()
functions? When should you use one rather than the other? They seem to generate identical output for all the inputs I can think of.
推荐答案
由于其他问题已被重定向到询问asanyarray
或其他数组创建例程,可能值得对它们各自的作用做一个简短的总结.
Since other questions are being redirected to this one which ask about asanyarray
or other array creation routines, it's probably worth having a brief summary of what each of them does.
区别主要在于何时返回不变的输入,而不是将新数组作为副本.
The differences are mainly about when to return the input unchanged, as opposed to making a new array as a copy.
array
提供了多种选项(大多数其他功能都是围绕它的薄包装器),包括用于确定何时复制的标志.完整的解释与文档一样长(请参见数组创建,但简单来说,这里是一些示例:
array
offers a wide variety of options (most of the other functions are thin wrappers around it), including flags to determine when to copy. A full explanation would take just as long as the docs (see Array Creation, but briefly, here are some examples:
假设a
是ndarray
,而m
是matrix
,并且它们的dtype
都是float32
:
Assume a
is an ndarray
, and m
is a matrix
, and they both have a dtype
of 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
不兼容.
np.array(a)
andnp.array(m)
will copy both, because that's the default behavior.np.array(a, copy=False)
andnp.array(m, copy=False)
will copym
but nota
, becausem
is not anndarray
.np.array(a, copy=False, subok=True)
andnp.array(m, copy=False, subok=True)
will copy neither, becausem
is amatrix
, which is a subclass ofndarray
.np.array(a, dtype=int, copy=False, subok=True)
will copy both, because thedtype
is not compatible.
大多数其他功能是array
周围的薄包装器,可控制何时进行复制:
Most of the other functions are thin wrappers around array
that control when copying happens:
-
asarray
:输入将为如果兼容的ndarray
(copy=False
),则返回未复制的内容. -
asanyarray
:输入将为如果它是兼容的ndarray
或类似matrix
(copy=False
,subok=True
)的子类,则返回未复制. -
ascontiguousarray
:输入将为如果它是连续的C顺序兼容的ndarray
(copy=False
,order='C')
. ),则返回未复制 -
asfortranarray
:输入将为如果它是连续的Fortran顺序(copy=False
,order='F'
)中兼容的ndarray
,则返回未复制. -
require
:输入将为如果未与指定的要求字符串兼容,则返回未复制的内容. -
copy
:输入始终为复制. -
fromiter
:输入被处理作为一个可迭代的(因此,例如,您可以从迭代器的元素构造一个数组,而不是使用迭代器的object
数组);始终复制.
asarray
: The input will be returned uncopied iff it's a compatiblendarray
(copy=False
).asanyarray
: The input will be returned uncopied iff it's a compatiblendarray
or subclass likematrix
(copy=False
,subok=True
).ascontiguousarray
: The input will be returned uncopied iff it's a compatiblendarray
in contiguous C order (copy=False
,order='C')
.asfortranarray
: The input will be returned uncopied iff it's a compatiblendarray
in contiguous Fortran order (copy=False
,order='F'
).require
: The input will be returned uncopied iff it's compatible with the specified requirements string.copy
: The input is always copied.fromiter
: The input is treated as an iterable (so, e.g., you can construct an array from an iterator's elements, instead of anobject
array with the iterator); always copied.
还有便捷功能,例如 asarray_chkfinite
(与asarray
相同的复制规则,但如果有任何nan
或inf
值,则会引发ValueError
),以及子类(如matrix
)或特殊情况(如记录数组)的构造函数,当然实际的 ndarray
构造函数(可让您创建一个直接从缓冲区中移出).
There are also convenience functions, like asarray_chkfinite
(same copying rules as asarray
, but raises ValueError
if there are any nan
or inf
values), and constructors for subclasses like matrix
or for special cases like record arrays, and of course the actual ndarray
constructor (which lets you create an array directly out of strides over a buffer).
这篇关于Numpy的array()和asarray()函数有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!