0
区别主要在于何时返回不变的输入,而不是将新数组作为副本。
array提供了多种选择(大多数其他功能都是围绕它的瘦包装器),包括用于确定何时复制的标志。
这里有一些示例:假设a是ndarray,并且m是matrix,他们都拥有float32的dtype:
- 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:如果兼容,则输入将返回未复制的状态。(copy=False,subok=True)
- asanyarray:如果输入是兼容ndarray或如matrix的子类则输入将不复制就返回。(copy=False,subok=True)
- ascontiguousarray:如果输入是一个兼容的ndarray,则输入将按连续的C序返回。 (copy=False, order='C').
- asfortranarray:如果输入是连续Fortran顺序中兼容的ndarray,则输入将不被复制(copy=False,order='F')。
- require:如果输入与指定的要求字符串兼容,则输入将不复制而返回。
- copy:总是复制输入。
- fromiter:输入被视为可迭代的(例如,您可以从迭代器的元素构造一个数组,而不是object使用迭代器的数组);始终复制。
还有一些便利功能,例如asarray_chkfinite(与asarray复制规则相同,但如果有nan或inf值则会产生错误),以及子类的构造函数(例如matrix)或特殊情况下的记录数组,当然还有实际的ndarray构造函数(可以直接创建超出缓冲区的数组)。
收藏