NumPy 1.14 - numpy.ma.apply_along_axis()

numpy.ma.apply_along_axis




numpy

numpy.ma.apply_along_axis

numpy.ma.apply_along_axis(func1d, axis, arr, *args, **kwargs) [source]

दिए गए अक्ष के साथ 1-D स्लाइस के लिए एक फ़ंक्शन लागू करें।

निष्पादित func1d(a, *args) जहां func1d 1-D सरणियों पर func1d करता है और axis साथ func1d 1-D टुकड़ा है।

यह ndindex और s_ के निम्न उपयोग के बराबर (लेकिन उससे अधिक) है, जो कि ii प्रत्येक, jj और kk को सूचकांकों के एक समूह में सेट करता है:

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 : function (M,) -> (Nj…)

इस फ़ंक्शन को 1-डी सरणियों को स्वीकार करना चाहिए। यह निर्दिष्ट अक्ष के साथ arr के 1-डी स्लाइस पर लागू होता है।

अक्ष : पूर्णांक

एक्सिस जिसके साथ arr जाती है।

गिरफ्तार : ndarray (नी…, एम, एनके…)

इनपुट सरणी

आर्ग्स : कोई भी

func1d लिए अतिरिक्त तर्क।

kwargs : कोई भी

func1d लिए अतिरिक्त नामित तर्क।

संस्करण 1.9.0 में नया।

यह दिखाता है:

बाहर : ndarray (नी…, एनजे…, एनके…)

आउटपुट सरणी। out का आकार axis आयाम को छोड़कर arr के आकार के समान है। यह अक्ष हटा दिया जाता है, और func1d के रिटर्न मान के आकार के बराबर नए आयामों के साथ बदल दिया जाता है। तो अगर func1d एक स्केलर रिटर्न देता है तो func1d तुलना में कम आयाम होंगे।

यह भी देखें

apply_over_axes
कई अक्षों पर बार-बार एक फ़ंक्शन लागू करें।

उदाहरण

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

एक फ़ंक्शन के लिए जो 1D सरणी देता है, outarr में आयामों की संख्या outarr के समान है।

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