-
由于将其他问题重定向到这个询问问题
asanyarray
或其他数组创建例程的问题,因此可能有必要简要概述每个问题的作法。区别主要在于何时返回不变的输入,而不是将新数组作为副本。
array
提供多种选择(其他大多数功能都围绕着薄包装纸),包括用于确定何时复制的标志。完整的解释将和文档一样长(请参阅Array
Creation,但是简要地,这里有一些示例:假设
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
在连续的Fortran顺序(copy=False
,order='F'
)。require
:如果输入与指定的要求字符串兼容,则输入将不复制而返回。copy
:总是复制输入。fromiter
:输入被视为可迭代的(例如,您可以从迭代器的元素构造一个数组,而不是object
使用迭代器的数组);始终复制。
还有一些便利功能,例如
asarray_chkfinite
(与复制规则相同asarray
,但复制规则与相同,但ValueError
如果有nan
或inf
值,则会提高),以及子类的构造函数(例如matrix
或特殊情况下的记录数组),当然还有实际的ndarray
构造函数(可让您直接创建数组)超出缓冲区)。