numpy – 数组vs asarray
Numpy的array()
和asarray()
函数有什么asarray()
? 你应该什么时候使用一个,而不是另一个? 他们似乎为我能想到的所有input产生相同的输出。
asarray
的定义是:
def asarray(a, dtype=None, order=None): return array(a, dtype, copy=False, order=order)
所以它就像array
,除了它有更less的选项,并copy=False
。 array
默认情况下具有copy=True
。
主要区别在于array
(默认情况下)将会创build对象的副本,而asarray
除非必要,否则不会创build该副本。
这个差别可以通过这个例子来certificate:
-
生成一个matrix
>>> A = numpy.matrix(np.ones((3,3))) >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
-
使用
numpy.array
来修改A
由于您正在修改副本而不起作用>>> numpy.array(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]])
-
使用
numpy.asarray
来修改A
它的工作原因是你正在修改A
本身>>> numpy.asarray(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 2., 2., 2.]])
希望这可以帮助!
在array
和asarray
的文档中提到了这些差别。 差异在于参数列表,因此函数的作用取决于这些参数。
函数定义如下:
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
和
numpy.asarray(a, dtype=None, order=None)
以下参数是可以传递给array
而不是像文档中提到的asarray
那样的参数:
copy:bool,可选如果为true(默认),则复制该对象 。 否则,只有在
__array__
返回一个副本时,如果obj是一个嵌套序列,或者需要一个副本来满足任何其他需求(dtype,order等),才会进行复制。subok:bool,可选如果为True,则子类将被传递 ,否则返回的数组将被强制为基类数组(默认值)。
ndmin:int,可选指定结果数组应具有的最小维数 。 为了满足这个要求,我们将根据需要预先设定形状。