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


Python numpy ma.apply_along_axis用法及代碼示例


本文簡要介紹 python 語言中 numpy.ma.apply_along_axis 的用法。

用法:

ma.apply_along_axis(func1d, axis, arr, *args, **kwargs)

沿給定軸將函數應用於一維切片。

執行 func1d(a, *args, **kwargs) ,其中 func1d 在一維數組上運行,a 是 arr 沿軸的一維切片。

這等效於(但比)以下使用 ndindex s_ ,將 iijjkk 設置為索引元組:

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])

參數

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

這個函數應該接受一維數組。它應用於沿指定軸的一維 arr 切片。

axis 整數

沿其切割 arr 的軸。

arr ndarray (Ni…, M, Nk…)

輸入數組。

args 任何

func1d 的附加參數。

kwargs 任何

func1d 的附加命名參數。

返回

out ndarray (Ni…, Nj…, Nk…)

輸出數組。除了沿軸維度外,out 的形狀與 arr 的形狀相同。該軸被移除,並替換為與 func1d 的返回值形狀相等的新維度。因此,如果 func1d 返回一個標量輸出將比 arr 少一個維度。

例子

>>> 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]])

對於返回更高維數組的函數,將插入這些維度來代替軸維度。

>>> 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]]])

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.ma.apply_along_axis。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。