NumPy 的 np.array
和 np.asarray
有什么区别?我什么时候应该使用一个而不是另一个?它们似乎产生相同的输出。
原文由 Benjamin Hodgson 发布,翻译遵循 CC BY-SA 4.0 许可协议
NumPy 的 np.array
和 np.asarray
有什么区别?我什么时候应该使用一个而不是另一个?它们似乎产生相同的输出。
原文由 Benjamin Hodgson 发布,翻译遵循 CC BY-SA 4.0 许可协议
asarray
的定义 是:
def asarray(a, dtype=None, order=None):
return array(a, dtype, copy=False, order=order)
所以它就像 array
,除了它有更少的选项,和 copy=False
。 array
默认有 copy=True
。
主要区别在于 array
(默认情况下)将复制对象,而 asarray
除非必要,否则不会。
原文由 unutbu 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
由于其他问题被重定向到这个询问
asanyarray
或 其他数组创建例程 的问题,因此可能值得对它们每个的作用做一个简短的总结。不同之处主要在于何时返回未更改的输入,而不是创建一个新数组作为副本。
array
提供了多种选择(大多数其他函数都是它的薄包装),包括用于确定何时复制的标志。完整的解释与文档一样长(参见 Array Creation ,但简单地说,这里有一些例子:Assume
a
is anndarray
, andm
is amatrix
, and they both have adtype
offloat32
:np.array(a)
和np.array(m)
将复制两者,因为这是默认行为。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)
将复制两者,因为dtype
不兼容。大多数其他函数都是围绕
array
的薄包装器—控制复制发生的时间:asarray
:如果它是兼容的ndarray
(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
:输入将以未复制的形式返回,前提是它与指定的要求字符串兼容。copy
:始终复制输入。fromiter
:输入被视为可迭代的(因此,例如,您可以从迭代器的元素构造一个数组,而不是object
带有迭代器的数组);总是被复制。There are also convenience functions, like
asarray_chkfinite
(same copying rules asasarray
, but raisesValueError
if there are anynan
orinf
值),以及子类的构造函数,如matrix
或记录数组等特殊情况,当然还有实际的ndarray
跨越缓冲区)。