galois field (GF4)에 numpy 배열을 사용하고 싶습니다. 그래서 GF4 클래스를 배열 요소로 설정합니다. 배열 + 정수 계산에서 작동하지만 배열 + 배열 계산에서는 작동하지 않습니다.galois 필드에서 numpy 배열을 계산하는 방법은 무엇입니까?
import numpy
class GF4(object):
"""class for galois field"""
def __init__(self, number):
self.number = number
self.__addL__ = ((0,1,2,3),(1,0,3,2),(2,3,0,1),(3,2,1,0))
self.__mulL__ = ((0,0,0,0),(0,1,2,3),(0,2,3,1),(0,3,1,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, 2, 0, 2, 1],
[0, 3, 1, 0, 3, 1],
[1, 2, 0, 3, 2, 1]], dtype=object)
In [262]: b
Out[262]:
array([[0, 0, 3, 1, 0, 0],
[0, 1, 0, 1, 1, 1],
[3, 2, 2, 0, 2, 0]], dtype=object)
In [263]: a+1
Out[263]:
array([[0, 0, 3, 1, 3, 0],
[1, 2, 0, 1, 2, 0],
[0, 3, 1, 2, 3, 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,0,0,0),(0,1,2,3),(0,2,3,1),(0,3,1,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, 1, 1, 1, 2, 1],
[0, 2, 1, 1, 2, 0],
[2, 0, 2, 3, 0, 1]], dtype=object)
"""
다음 코드는 어떻게 수정해야합니까? 수업 GF4를 사용하고 싶습니다.
나는 모든 계산이 갈루아 필드에있는 rabin의 정보 분산 알고리즘을 구현하려고합니다. 코드가 유망하다고 생각 하긴하지만, 파이썬에 익숙하지 않기 때문에 이해가되지 않습니다. 나를 의뢰 할 수있는 사건에 관한 문서가 있습니까? – Miind
문서가 없으며 코드 세부 정보를 잊어 버렸습니다 ... 이러한 코드는 Galois Field 클래스와 GF - GF 및 GF - Integer에 대한 연산자 (add/sub/mul/div)를 오버로드합니다. GF4 연산은 번호 매핑 (\ _ \ _ addL \ _ \ _ 및 \ _ \ _ mulL \ _ \ _)을 간단하게 정의 할 수 있습니다. 또한 GF4 sub 및 div는 add 및 mul의 하위 집합입니다. –