概述
import numpy class GF4(object): """class for galois field""" def __init__(self,number): self.number = number self.__addL__ = ((0,1,2,3),(1,3,2),(2,1),(3,0)) self.__mulL__ = ((0,0),(0,2)) def __add__(self,x): return self.__addL__[self.number][x] def __mul__(self,x): return self.__mulL__[self.number][x] def __sub__(self,x): return self.__addL__[self.number][x] def __div__(self,x): return self.__mulL__[self.number][x] def __repr__(self): return str(self.number) a = numpy.array([GF4(numpy.random.randint(4)) for i in range(18)]).reshape(3,6) b = numpy.array([GF4(numpy.random.randint(4)) for i in range(18)]).reshape(3,6) """" In [261]: a Out[261]: array([[1,1],[0,[1,1]],dtype=object) In [262]: b Out[262]: array([[0,0],[3,0]],dtype=object) In [263]: a+1 Out[263]: array([[0,dtype=object) In [264]: a+b --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-264-f1d53b280433> in <module>() ----> 1 a+b <ipython-input-260-0679b73b59a4> in __add__(self,x) 8 self.__mulL__ = ((0,2)) 9 def __add__(self,x): ---> 10 return self.__addL__[self.number][x] 11 def __mul__(self,x): 12 return self.__mulL__[self.number][x] TypeError: tuple indices must be integers,not GF4 """
但它也适用于数组和数组*整数计算.
""" In [265]: a+b*1 Out[265]: array([[1,[2,dtype=object) """
我该如何更正以下代码?
我想用我的班级GF4.
def __add__(self,x): if isinstance(x,GF4): x = x.number return self.__addL__[self.number][x]
还有一个潜在的问题你可能想看一下,这就解释了为什么你的第三个测试用例有效:当你向GF4添加一个int时返回的是一个int,而不是一个GF4.除非这是一个理想的行为,否则我认为__add__的代码应该更像:
def __add__(self,GF4): x = x.number return GF4(self.__addL__[self.number][x])
您可能想要考虑所有可能性并决定是否需要构建更多安全措施并抛出一些自己的错误,例如:如果你试图给GF4添加一个浮点数应该是什么回报?
总结
以上是编程之家为你收集整理的如何计算galois字段上的numpy数组?全部内容,希望文章能够帮你解决如何计算galois字段上的numpy数组?所遇到的程序开发问题。
如果您也喜欢它,动动您的小指点个赞吧