Возникла задача, связанная с полями Галуа. Решил заодно язык новый освоить.
Определил новый класс и перегрузил в нем операции сложения/умножения/и т.д.
Создал матрицу из объектов нового типа для проверки:
import numpy as np import gfpy as gf import random as rnd a=[[gf.GF(rnd.randint(0,7)) for v in range(sz)] for i in range(sz)] b=[[gf.GF(rnd.randint(0,7)) for v in range(sz)] for i in range(sz)] c=[gf.GF(rnd.randint(0,7)) for v in range(sz)] a=np.matrix(a,dtype=gf.GF) b=np.matrix(b,dtype=gf.GF) a+b c*a
np.linalg.inv(a)
приводит к ошибке:
File “C:\ProgramData\Anaconda3\lib\site-packages\numpy\linalg\linalg.py”, line 528, in inv
ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
TypeError: No loop matching the specified signature and casting
was found for ufunc inv
Вопрос: inv() работает только со стандартными типами из-за оптимизации или чего-то не хватает в моем классе?