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


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


用法:

class dask.array.gufunc.gufunc(pyfunc, *, signature=None, vectorize=False, axes=None, axis=None, keepdims=False, output_sizes=None, output_dtypes=None, allow_rechunk=False, meta=None)

调用时将pyfunc 绑定到dask.array.apply_gufunc

参数

pyfunc可调用的

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

signature字符串,仅关键字

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

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

返回

包装函数

参考

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
>>> a = da.random.normal(size=(10,20,30), chunks=(5, 10, 30))
>>> def stats(x):
...     return np.mean(x, axis=-1), np.std(x, axis=-1)
>>> gustats = da.gufunc(stats, signature="(i)->(),()", output_dtypes=(float, float))
>>> mean, std = gustats(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))
>>> def outer_product(x, y):
...     return np.einsum("i,j->ij", x, y)
>>> guouter_product = da.gufunc(outer_product, signature="(i),(j)->(i,j)", output_dtypes=float, vectorize=True)
>>> c = guouter_product(a, b)
>>> c.compute().shape
(10, 20, 30, 40)
>>> a = da.ones((1, 5, 10), chunks=(-1, -1, -1))
>>> def stats(x):
...     return np.atleast_1d(x.mean()), np.atleast_1d(x.max())
>>> meta = (np.array((), dtype=np.float64), np.array((), dtype=np.float64))
>>> gustats = da.gufunc(stats, signature="(i,j)->(),()", meta=meta)
>>> result = gustats(a)
>>> result[0].compute().shape
(1,)
>>> result[1].compute().shape
(1,)

相关用法


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