Numpy中array()和asarray()函数之间有什么区别?
0 548
2

Numpy中array()和asarray()函数之间有什么区别?什么时候应该使用一个而不是另一个?好像我能想到的所有输入他们都会生成相同的输出。

收藏
2021-01-27 13:26 更新 anna •  5050
共 1 个回答
高赞 时间
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构造函数(可以直接创建超出缓冲区的数组)。

Via:https://stackoverflow.com/a/52103839/14964791

收藏
2021-01-27 14:31 更新 karry •  4552