의 하위 클래스에서 numpy ufuncs의 동작을 재정의하기 위해 __numpy_ufunc__()
설명 된 방법을 사용하려고하는데, 결코 호출되지 않는 것 같습니다. 이 유스 케이스가 가이드에 나열되어 있음에도 불구하고 실제로 __numpy_ufunc__()
을 사용하는 사람의 사례는 찾을 수 없습니다. 아무도 이것을 시도 했습니까? 다음은 최소 예입니다.__numpy_ufunc __()의 사용
# Check python version
import sys
print(sys.version)
3.5.1 | Continuum Analytics, Inc. | (기본 이세 (15) 2016 15시 32분 45초)
[GCC 4.4.7 20120313 (레드햇 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))
& langle ; 클래스 '메인. 기능'& rangle; & nbsp; 클래스 '메인. 기능'& rangle;
# Add using operator
f1+f2
함수 ([2,4,6])
# Add, explicitly demanding a numpy ufunc
np.add(f1,f2)
함수 ([2, 4, 6]) 분명히
상기 서브 클래스의 작동은, 그것이 NumPy와를 이용한 것은 추가 배열 뒤에서. num3의 새 버전을 사용하여__numpy_ufunc__()
기능을 사용하고 있습니다 (해당 docs 페이지에 따르면 v1.11의 새로운 기능). 그러나이 코드는 절대로
"In PF __numpy_ufunc__"
을 출력하지 않습니다. 뭐라 구요?
이상한 ... 설명서에 'self'인수가 나열되어 있거나 'staticmethod'또는 'classmethod'여야한다고합니다. – user2357112
'ndarray'는 자체 __numpy_ufunc__를 가지고 있다고 생각하지 않습니다. 따라서'super'를 통해 호출하려고해서는 안됩니다. – user2357112
@ user2357112 두 가지 모두에 동의합니다. 내가 그 문제를 muddling 그 문제를 원하지 않기 때문에 나는'슈퍼'라인을 제거합니다. –