0

R中是否有任何用于伽罗瓦域(GF)的包?我想用 GF 定义以下矩阵运算。

  • 1+1=0
  • 1+0=1
  • 0+1=1
  • 0+0=0

1+1显然,如果没有指定,R 就无法理解:

> k <- matrix(c(0,1,1,0,1,0,0,0,0,1), ncol=10);k
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    1    1    0    1    0    0    0    0     1
> p <- matrix(c(0,0,0,1,1,1,0,1,0,1), ncol=10);p
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    0    1    1    1    0    1    0     1
> c <- k+p;c
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    1    1    1    2    1    0    1    0     2
4

2 回答 2

3

我对伽罗瓦域一无所知,但从这个问题看来,加法和减法等同于xor. 仅使用这个事实来进行计算可能会更容易。

as.integer(xor(k,p))

或者,如果你想变得更花哨,你可以重载操作符并定义你自己的类:

`+.GF`<-function (x, y) as.integer((x | y) & !(x & y))
class(k)<-'GF'
class(p)<-'GF'
k+p
[1] 0 1 1 1 0 1 0 1 0 0
于 2013-07-11T12:37:46.533 回答
2

你可以自己定义一个函数。看起来你只是在做布尔运算。

myadd <- function(x, y){(x+y) %% 2}

例子

> a <- matrix(c(0,0,1,1),2,2)
> b <- matrix(c(0,1,0,1),2,2)
> a
     [,1] [,2]
[1,]    0    1
[2,]    0    1
> b
     [,1] [,2]
[1,]    0    0
[2,]    1    1
> myadd(a,b)
     [,1] [,2]
[1,]    0    1
[2,]    1    0
于 2013-07-11T12:37:24.820 回答