簡體   English   中英

使用__numpy_ufunc __()

[英]Use of __numpy_ufunc__()

我試圖使用__numpy_ufunc__()方法解釋在numpy的1.11文檔這里 ,覆蓋上的一個子類numpy的ufuncs的行為ndarray ,但它似乎永遠不會被調用。 盡管指南中列出了這個用例,但我找不到任何實際使用__numpy_ufunc__()例子。 有沒人試過這個? 這是一個最小的例子:

# Check python version
import sys
print(sys.version)

3.5.1 | Continuum Analytics,Inc。| (默認,2016年6月15日,15:32:45)

[GCC 4.4.7 20120313(Red Hat 4.4.7-1)

# Check numpy version
import numpy as np
print(np.__version__)

1.11.2

# Subclass ndarray as discussed in 
# https://docs.scipy.org/doc/numpy/user/basics.subclassing.html
class Function(np.ndarray):

    # Create subclass object by view
    def __new__(cls):
        obj = np.asarray([1,2,3]).view(cls)
        return obj

    # I'm not even adding anything functionality yet
    def __array_finalize(self,obj): pass

    # Override ufuncs
    def __numpy_ufunc__(ufunc, method, i, inputs, **kwargs):
        print("In PF __numpy_ufunc__")
        # do other stuff here if I want to 
        # and probably need to return a value...

# Create two Functions
f1=Function()
f2=Function()

# Check that they are correctly initialized as Function objects
# not just ndarrays
print(type(f1),type(f2))

⟨class的主要 .Function'⟩⟨class的主要 .Function'⟩

# Add using operator
f1+f2

功能([2,4,6])

# Add, explicitly demanding a numpy ufunc
np.add(f1,f2)

功能([2,4,6])

很明顯,子類化工作,並使用numpy在幕后添加數組。 我正在使用一個足夠新的numpy版本來使用__numpy_ufunc__()功能(根據該文檔頁面,它是v1.11中的新功能)。 但是這段代碼永遠不會輸出"In PF __numpy_ufunc__" 是什么賦予了?

此功能最終在Numpy 1.13中以新名稱發布:

__array_ufunc__補充道

這是重命名和重新設計的__numpy_ufunc__ 任何類,ndarray子類是否可以定義此方法或將其設置為None以覆蓋NumPy的ufuncs的行為。 這與Python的__mul__和其他二進制操作例程非常相似。 有關此新選項的實現和行為的更詳細說明,請參閱文檔。 API是臨時的,我們尚不保證向后兼容性,因為可能會在等待反饋之前進行修改。 有關更多詳細信息,請參閱NEP文檔

這應該可以解決這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM