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=Falsearray默认情况下具有copy=True

主要区别在于array (默认情况下)将会创build对象的副本,而asarray除非必要,否则不会创build该副本。

这个差别可以通过这个例子来certificate:

  1. 生成一个matrix

     >>> A = numpy.matrix(np.ones((3,3))) >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]) 
  2. 使用numpy.array来修改A 由于您正在修改副本而不起作用

     >>> numpy.array(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 1., 1., 1.]]) 
  3. 使用numpy.asarray来修改A 它的工作原因是你正在修改A本身

     >>> numpy.asarray(A)[2]=2 >>> A matrix([[ 1., 1., 1.], [ 1., 1., 1.], [ 2., 2., 2.]]) 

希望这可以帮助!

arrayasarray的文档中提到了这些差别。 差异在于参数列表,因此函数的作用取决于这些参数。

函数定义如下:

 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,可选指定结果数组应具有的最小维数 。 为了满足这个要求,我们将根据需要预先设定形状。