Я хочу, чтобы R вычислял ранг двоичной матрицы 32x32.Единственными допустимыми операциями с строками являются перестановки и xor-xing двух строк.
Например, для матрицы
(1 1 0)
(0 1 1)
(1 0 1)
ранг равен 2, поскольку:
(1,1,0)xor(0,1,1)=(1,0,1)
Мой код
binaryrank<-function(m){
i<-1
r<-32
for(j in 1:32){
l<-match(1,m[i:32,j])
if(is.na(l)){
r<-r-1
}
else{
swap(m[i+l-1,],m[i,])
k<-i+1
while(k<=32){
if(m[k,j]==1){
m[k,]<-mod(m[k,]+m[i,],2)
}
k<-k+1
}
i<-i+1
}
}
return(r)
}
Код работает хорошо, но для моих целей он немного медленный.Как я могу сделать это более эффективным?