用法:
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_sizes:dict,可选,仅关键字
从维度名称到输出大小的可选映射。仅当新的核心维度(未在输入上找到)出现在输出上时使用。
- 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
。- **kwargs:dict
额外的关键字参数传递给
func
- 单个 dask.array 数组或 dask.array 数组的元组
参数:
返回:
参考:
例子:
>>> 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)
相关用法
- Python dask.array.gufunc.as_gufunc用法及代码示例
- Python dask.array.gufunc.gufunc用法及代码示例
- Python dask.array.gradient用法及代码示例
- Python dask.array.greater_equal用法及代码示例
- Python dask.array.greater用法及代码示例
- Python dask.array.stats.ttest_ind用法及代码示例
- Python dask.array.ma.masked_values用法及代码示例
- Python dask.array.divmod用法及代码示例
- Python dask.array.negative用法及代码示例
- Python dask.array.overlap.map_overlap用法及代码示例
- Python dask.array.stats.ttest_rel用法及代码示例
- Python dask.array.ma.average用法及代码示例
- Python dask.array.vstack用法及代码示例
- Python dask.array.isneginf用法及代码示例
- Python dask.array.ma.masked_array用法及代码示例
- Python dask.array.matmul用法及代码示例
- Python dask.array.random.weibull用法及代码示例
- Python dask.array.Array.compute_chunk_sizes用法及代码示例
- Python dask.array.random.geometric用法及代码示例
- Python dask.array.around用法及代码示例
注:本文由纯净天空筛选整理自dask.org大神的英文原创作品 dask.array.gufunc.apply_gufunc。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。