<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 6.1。高級擴展 API > 原文: [http://numba.pydata.org/numba-doc/latest/extending/high-level.html](http://numba.pydata.org/numba-doc/latest/extending/high-level.html) 此擴展 API 通過 [`numba.extending`](index.html#module-numba.extending "numba.extending") 模塊公開。 ## 6.1.1。實現功能 `@overload`裝飾器允許您實現在 [nopython 模式](../glossary.html#term-nopython-mode)功能中使用的任意函數。用`@overload`修飾的函數在編譯時使用函數運行時參數的 _ 類型 _ 調用。它應該返回一個 callable,表示給定類型的函數的 _ 實現 _。返回的實現由 Numba 編譯,就像它是用`@jit`修飾的普通函數一樣。 `@jit`的其他選項可以使用`jit_options`參數作為字典傳遞。 例如,讓我們假裝 Numba 不支持元組上的 [`len()`](https://docs.python.org/3/library/functions.html#len "(in Python v3.7)") 函數。以下是使用`@overload`實現它的方法: ```py from numba import types from numba.extending import overload @overload(len) def tuple_len(seq): if isinstance(seq, types.BaseTuple): n = len(seq) def len_impl(seq): return n return len_impl ``` 您可能想知道,如果使用除元組以外的其他內容調用 [`len()`](https://docs.python.org/3/library/functions.html#len "(in Python v3.7)") 會發生什么?如果用`@overload`修飾的函數不返回任何內容(即返回 None),則嘗試其他定義直到成功。因此,多個庫可能會使 [`len()`](https://docs.python.org/3/library/functions.html#len "(in Python v3.7)") 超載不同類型,而不會相互沖突。 ## 6.1.2。實施方法 `@overload_method`裝飾器類似地允許在 Numba 眾所周知的類型上實現方法。以下示例在 Numpy 數組上實現 [`take()`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.take.html#numpy.ndarray.take "(in NumPy v1.16)") 方法: ```py @overload_method(types.Array, 'take') def array_take(arr, indices): if isinstance(indices, types.Array): def take_impl(arr, indices): n = indices.shape[0] res = np.empty(n, arr.dtype) for i in range(n): res[i] = arr[indices[i]] return res return take_impl ``` ## 6.1.3。實現屬性 `@overload_attribute`裝飾器允許在類型上實現數據屬性(或屬性)。只能讀取屬性;只有[低級 API](low-level.html#low-level-extending) 支持可寫屬性。 以下示例在 Numpy 數組上實現 [`nbytes`](https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.nbytes.html#numpy.ndarray.nbytes "(in NumPy v1.16)") 屬性: ```py @overload_attribute(types.Array, 'nbytes') def array_nbytes(arr): def get(arr): return arr.size * arr.itemsize return get ``` ## 6.1.4。導入 Cython 函數 函數`get_cython_function_address`獲取 Cython 擴展模塊中 C 函數的地址。該地址可用于通過 [`ctypes.CFUNCTYPE()`](https://docs.python.org/3/library/ctypes.html#ctypes.CFUNCTYPE "(in Python v3.7)") 回調訪問 C 函數,從而允許在 Numba jitted 函數中使用 C 函數。例如,假設您有文件`foo.pyx`: ```py from libc.math cimport exp cdef api double myexp(double x): return exp(x) ``` 您可以通過以下方式從 Numba 訪問`myexp`: ```py import ctypes from numba.extending import get_cython_function_address addr = get_cython_function_address("foo", "myexp") functype = ctypes.CFUNCTYPE(ctypes.c_double, ctypes.c_double) myexp = functype(addr) ``` 函數`myexp`現在可以在 jitted 函數中使用,例如: ```py @njit def double_myexp(x): return 2*myexp(x) ``` 需要注意的是,如果您的函數使用 Cython 的融合類型,那么函數的名稱將被破壞。要找出函數的錯位名稱,可以檢查擴展模塊的`__pyx_capi__`屬性。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看