当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python dask.array.gufunc.apply_gufunc用法及代码示例


用法:

dask.array.gufunc.apply_gufunc(func, signature, *args, axes=None, axis=None, keepdims=False, output_dtypes=None, output_sizes=None, vectorize=None, allow_rechunk=False, meta=None, **kwargs)

将通用的 ufunc 或类似的 python 函数应用于数组。

signature 确定函数是消耗还是产生核心维度。给定输入数组 (*args) 中的剩余维度被视为循环维度,并且需要自然地相互广播。

换句话说,此函数类似于 np.vectorize ,但用于 dask 数组块。如果函数本身也应矢量化,请使用vectorize=True 为方便起见。

参数

func可调用的

在返回数组或数组元组的输入数组 (*args) 上调用类似 func(*args, **kwargs) 的函数。如果提供了多个尺寸不匹配的参数,则此函数应以 NumPy 通用函数 [1] 的样式在位置参数的轴上进行矢量化(广播)(如果不是这种情况,请设置 vectorize=True ) .如果此函数返回多个输出,则还必须设置output_core_dims

signature: string

指定 func 消耗和生成的核心维度。根据numpy.gufunc签名规范[2]

*args数字

可调用函数的输入数组或标量。

axes: List of tuples, optional, keyword only

具有广义 ufunc 应操作的轴索引的元组列表。例如,对于适合矩阵乘法的"(i,j),(j,k)->(i,k)" 的签名,基本元素是二维矩阵,这些元素被存储在每个参数的最后两个轴中。相应的轴关键字将是 [(-2, -1), (-2, -1), (-2, -1)] 。为简单起见,对于对一维数组(向量)进行操作的广义 ufunc,接受单个整数而不是 single-element 元组,对于所有输出都是标量的广义 ufunc,可以省略输出元组。

axis: int, optional, keyword only

通用 ufunc 应在其上运行的单个轴。对于在单个共享核心维度上运行的 ufunc,这是一个 short-cut,相当于为每个 single-core-dimension 参数传入带有 (axis,) 条目的轴,对于所有其他参数传入 ()。例如,对于签名 "(i),(i)->()" ,它相当于传入 axes=[(axis,), (axis,), ()]

keepdims: bool, optional, keyword only

如果将其设置为 True,则减少的轴将作为尺寸为 1 的维度留在结果中,以便结果将针对输入正确广播。此选项只能用于通用 ufunc,这些 ufunc 对所有具有相同数量的核心维度的输入和没有核心维度的输出进行操作,即具有像 "(i),(i)->()""(m,m)->()" 这样的签名。如果使用,可以使用轴和轴来控制输出中尺寸的位置。

output_dtypes可选,dtype 或 dtype 列表,仅关键字

有效的 numpy dtype 规范或其列表。如果未给出,则执行带有少量数据的func 调用,以尝试自动确定输出数据类型。

output_sizesdict,可选,仅关键字

从维度名称到输出大小的可选映射。仅当新的核心维度(未在输入上找到)出现在输出上时使用。

vectorize: bool, keyword only

如果设置为 True ,则为方便起见,将 np.vectorize 应用于 func。默认为 False

allow_rechunk: Optional, bool, keyword only

允许重新分块,否则块大小需要匹配并且核心尺寸仅包含一个块。警告:启用此函数会显著增加内存使用量。默认为 False

meta: Optional, tuple, keyword only

说明 gufunc 输出的形状和 dtype 的空 ndarray 元组。默认为 None

**kwargsdict

额外的关键字参数传递给func

返回

单个 dask.array 数组或 dask.array 数组的元组

参考

1

https://docs.scipy.org/doc/numpy/reference/ufuncs.html

2

https://docs.scipy.org/doc/numpy/reference/c-api/generalized-ufuncs.html

例子

>>> import dask.array as da
>>> import numpy as np
>>> def stats(x):
...     return np.mean(x, axis=-1), np.std(x, axis=-1)
>>> a = da.random.normal(size=(10,20,30), chunks=(5, 10, 30))
>>> mean, std = da.apply_gufunc(stats, "(i)->(),()", a)
>>> mean.compute().shape
(10, 20)
>>> def outer_product(x, y):
...     return np.einsum("i,j->ij", x, y)
>>> a = da.random.normal(size=(   20,30), chunks=(10, 30))
>>> b = da.random.normal(size=(10, 1,40), chunks=(5, 1, 40))
>>> c = da.apply_gufunc(outer_product, "(i),(j)->(i,j)", a, b, vectorize=True)
>>> c.compute().shape
(10, 20, 30, 40)

相关用法


注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask.array.gufunc.apply_gufunc。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。