dask.数组.gufunc.作为_gufunc
dask.数组.gufunc.作为_gufunc¶
- dask.array.gufunc.as_gufunc(signature=None, **kwargs)[源代码]¶
dask.array.gufunc的装饰器。- 参数
- 签名字符串
指定
func消耗和生成的核心维度。根据 numpy.gufunc 签名的规范 [2]。- axes: 元组列表, 可选, 仅关键字参数
一个元组列表,包含广义ufunc应操作的轴的索引。例如,对于矩阵乘法的签名
"(i,j),(j,k)->(i,k)",基本元素是二维矩阵,并且这些矩阵被认为是存储在每个参数的最后两个轴中。相应的axes关键字将是[(-2, -1), (-2, -1), (-2, -1)]。为简单起见,对于操作一维数组(向量)的广义ufuncs,可以接受单个整数而不是单元素元组,并且对于所有输出都是标量的广义ufuncs,可以省略输出元组。- 轴: int, 可选, 仅关键字
一个泛型ufunc应操作的单个轴。这是对那些在单个共享核心维度上操作的ufunc的快捷方式,等同于为每个单核心维度参数传递包含(axis,)的轴,并为所有其他参数传递``()``。例如,对于签名``”(i),(i)->()”
,它等同于传递``axes=[(axis,), (axis,), ()]。- keepdims: bool, 可选, 仅关键字参数
如果设置为 True,被缩减的轴将作为大小为一的维度保留在结果中,以便结果能正确地与输入进行广播。此选项只能用于对所有输入具有相同核心维度的广义 ufuncs,并且输出没有核心维度,即签名类似于
"(i),(i)->()"或"(m,m)->()"。如果使用,可以通过 axes 和 axis 控制输出中维度的位置。- 输出数据类型可选,dtype 或 dtypes 列表,仅关键字参数
有效的 numpy dtype 规范或其列表。如果未提供,则会对
func进行少量数据的调用,以尝试自动确定输出 dtypes。- 输出尺寸dict, 可选, 仅限关键字
可选的从维度名称到输出大小的映射。仅在输出中出现新的核心维度(在输入中未找到)时使用。
- vectorize: bool, 仅关键字参数
如果设置为
True,np.vectorize将应用于func以方便使用。默认为False。- allow_rechunk: 可选, bool, 仅关键字
允许重新分块,否则块大小需要匹配,核心维度只能由一个块组成。警告:启用此功能会显著增加内存使用。默认为
False。- meta: 可选, 元组, 仅关键字
描述 gufunc 输出形状和数据类型的空 ndarray 元组。默认为
None。
- 返回
- 用于 pyfunc 的装饰器,它本身返回一个 gufunc。
参考文献
示例
>>> import dask.array as da >>> import numpy as np >>> a = da.random.normal(size=(10,20,30), chunks=(5, 10, 30)) >>> @da.as_gufunc("(i)->(),()", output_dtypes=(float, float)) ... def stats(x): ... return np.mean(x, axis=-1), np.std(x, axis=-1) >>> mean, std = stats(a) >>> mean.compute().shape (10, 20)
>>> a = da.random.normal(size=( 20,30), chunks=(10, 30)) >>> b = da.random.normal(size=(10, 1,40), chunks=(5, 1, 40)) >>> @da.as_gufunc("(i),(j)->(i,j)", output_dtypes=float, vectorize=True) ... def outer_product(x, y): ... return np.einsum("i,j->ij", x, y) >>> c = outer_product(a, b) >>> c.compute().shape (10, 20, 30, 40)