Python 什么';s在xarray'中dask=并行化和dask=允许的差异;我们申请什么?

Python 什么';s在xarray'中dask=并行化和dask=允许的差异;我们申请什么?,python,numpy,dask,python-xarray,numpy-ufunc,Python,Numpy,Dask,Python Xarray,Numpy Ufunc,在函数apply_ufunc的 dask: ‘forbidden’, ‘allowed’ or ‘parallelized’, optional How to handle applying to objects containing lazy data in the form of dask arrays: ‘forbidden’ (default): raise an error if a dask array is encountered. ‘allowed’:

在函数apply_ufunc的

dask: ‘forbidden’, ‘allowed’ or ‘parallelized’, optional

    How to handle applying to objects containing lazy data in the form of dask arrays:

    ‘forbidden’ (default): raise an error if a dask array is encountered.
    ‘allowed’: pass dask arrays directly on to func.
    ‘parallelized’: automatically parallelize func if any of the inputs are a dask array. 
                    If used, the output_dtypes argument must also be provided. 
                    Multiple output arguments are not yet supported.
在上的文档页面中,有一个注释:

对于大多数已经由dask包装的NumPy函数,通常最好使用预先存在的dask.array函数,方法是使用预先存在的xarray方法或使用带有dask='allowed'的_ufunc()。与Dask='parallelized'提供的通用加速不同,Dask通常可以有一个更高效的实现,利用问题的特殊结构


然而,我仍然不清楚这两种选择之间的区别。
allowed
是否仍然逐个操作块以降低内存使用率?如果应用的ufunc仅使用dask操作,
允许
仍将并行化吗?为什么并行化
要求您提供有关ufunc输出的更多信息(即参数
输出数据类型
输出大小
),而不是
允许的
呢?

dask='allowed'
意味着您正在应用一个已经知道如何处理dask数组的函数,例如。,用
dask.array
操作编写的函数。在大多数情况下,这确实意味着函数将逐个对块进行操作,以降低内存使用率,并并行应用计算

dask='parallelized'
需要用户提供更多信息,因为它创建了自己的包装器,允许提供的函数通过使用低级dask.array函数(如)对dask数组进行操作。使用
dask='parallellelized'
,您可以提供一个只知道如何处理NumPy数组的函数,而
xarray.apply\ufunc
也将扩展它以处理dask数组