當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。