numpy.zeros_like()中subok选项的用途和用途是什么?

时间:2018-05-27 01:35:22

标签: python class numpy subclass

使用numpy的zeros_like及相关功能,有一个选项

  

subok: bool,可选。

     

numpy.zeros_like(a,dtype = None,order =' K',subok = True

     

如果为True,则新创建的数组将使用子类类型'a',否则它将是基类数组。默认为True。

我假设所有numpy数组都属于ndarray类,我从未需要详细查看数组的子类。在什么情况下我可以选择不使用相同的子类,指定使用基类?

1 个答案:

答案 0 :(得分:2)

  

目的实用程序 ...?

目的:

呼叫签名帮助传递已处理的实例类型,如下所示:

>>> np.array( np.mat( '1 2; 3 4' ),    # array-to-"process"
              subok = True             # FLAG True to ["pass-through"] the type
              )
matrix([[1, 2],
        [3, 4]])                       # RESULT is indeed the instance of matrix

相反,如果不愿意"重新处理" .shape并使用 subok = False 实例化相同的类,生成的*_alike()将不会获得相同的类,例如"示例&#34 ;该过程用于生成*_alike() - 生成的输出:

type(                np.mat( '1 2;3 4' ) )   # <class 'numpy.matrixlib.defmatrix.matrix'>
type( np.array(      np.mat( '1 2;3 4' ) ) ) # <type 'numpy.ndarray'>
type( np.zeros_like( np.mat( '1 2;3 4' ) ) ) # <class 'numpy.matrixlib.defmatrix.matrix'>

>>> np.zeros_like(   np.mat( '1 2;3 4' ), subok = True  )
matrix([[0, 0],
        [0, 0]])
>>> np.zeros_like(   np.mat( '1 2;3 4' ), subok = False )
array([[0, 0],
       [0, 0]])

效用:

这些subok - 这些标记在更多numpy个函数(不仅是*_like() - s,也在np.array( ... ))中很常见,出于同样的目的,因为它对于智能类型修改代码设计是非常有用的,其中产生所需类型的产品并且生成&#34; -process,因此如果事后修改是,则不会产生与类相关的过度开销,从而实现结果。否则需要。