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


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


用法:

dask.array.apply_along_axis(func1d, axis, arr, *args, dtype=None, shape=None, **kwargs)

沿给定轴将函数应用于一维切片。

此文档字符串是从 numpy.apply_along_axis 复制的。

可能存在与 Dask 版本的一些不一致之处。

这是通过dask.array.map_blocks() 实现的numpy.apply_along_axis() 的阻塞变体

参数

func1d函数 (M,) -> (Nj…)

这个函数应该接受一维数组。它应用于沿指定轴的arr 的一维切片。

axis整数

arr 沿其切片的轴。

arrndarray (Ni…, M, Nk…)

输入数组。

args任何

func1d 的附加参数。

kwargs任何

func1d 的附加命名参数。

返回

outndarray (Ni…, Nj…, Nk…)

输出数组。 out 的形状与 arr 的形状相同,除了沿 axis 维度。该轴被移除,并替换为与 func1d 的返回值形状相等的新尺寸。因此,如果 func1d 返回一个标量 out 将比 arr 少一个维度。

注意

如果没有提供 dtypeshape 中的任何一个,Dask 会尝试通过在虚拟数组上调用 func1d 来确定它们。这可能会为 dtypeshape 生成不正确的值,因此我们建议提供它们。

执行 func1d(a, *args, **kwargs) 其中 func1d 对一维数组进行操作,而 aarr 沿 axis 的一维切片。

这等效于(但比)以下使用 ndindexs_ ,将 ii , jjkk 设置为索引元组:

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
for ii in ndindex(Ni):
    for kk in ndindex(Nk):
        f = func1d(arr[ii + s_[:,] + kk])
        Nj = f.shape
        for jj in ndindex(Nj):
            out[ii + jj + kk] = f[jj]

等效地,消除内部循环,这可以表示为:

Ni, Nk = a.shape[:axis], a.shape[axis+1:]
for ii in ndindex(Ni):
    for kk in ndindex(Nk):
        out[ii + s_[...,] + kk] = func1d(arr[ii + s_[:,] + kk])

例子

>>> def my_func(a):  
...     """Average first and last element of a 1-D array"""
...     return (a[0] + a[-1]) * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])  
>>> np.apply_along_axis(my_func, 0, b)  
array([4., 5., 6.])
>>> np.apply_along_axis(my_func, 1, b)  
array([2.,  5.,  8.])

对于返回一维数组的函数,outarr 中的维数与 arr 相同。

>>> b = np.array([[8,1,7], [4,3,9], [5,2,6]])  
>>> np.apply_along_axis(sorted, 1, b)  
array([[1, 7, 8],
       [3, 4, 9],
       [2, 5, 6]])

对于返回更高维数组的函数,将插入这些维度来代替 axis 维度。

>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])  
>>> np.apply_along_axis(np.diag, -1, b)  
array([[[1, 0, 0],
        [0, 2, 0],
        [0, 0, 3]],
       [[4, 0, 0],
        [0, 5, 0],
        [0, 0, 6]],
       [[7, 0, 0],
        [0, 8, 0],
        [0, 0, 9]]])

相关用法


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