Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为大型矩阵中的每一行确定1位最近邻_R_Matrix - Fatal编程技术网

R 为大型矩阵中的每一行确定1位最近邻

R 为大型矩阵中的每一行确定1位最近邻,r,matrix,R,Matrix,假设矩阵为0和1: library(gtools) mat<-permutations(n = 2, r = 5, v = c(0,1), repeats.allowed = TRUE) mat<-cbind(mat, round(runif(nrow(mat)), digits = 2)) 对于较大的目标向量(即排列中较大的r),我的代码运行时间非常长。 有什么方法可以更有效地做到这一点吗?假设mat包含所有长度r的位字符串,并且是有序的,如示例中所示(如果没有排序,您可以对其排

假设矩阵为0和1:

library(gtools)
mat<-permutations(n = 2, r = 5, v = c(0,1), repeats.allowed = TRUE)
mat<-cbind(mat, round(runif(nrow(mat)), digits = 2))
对于较大的目标向量(即
排列中较大的
r
),我的代码运行时间非常长。
有什么方法可以更有效地做到这一点吗?

假设
mat
包含所有长度
r
的位字符串,并且是有序的,如示例中所示(如果没有排序,您可以对其排序),那么您可以显式地计算邻居的索引,而无需遍历整个数组。例如:

m0<-mat[,-ncol(mat)]
bitflips<-diag(ncol(m0))
powers<-2^(ncol(m0):1-1)
neighbors<-t(apply(m0,1,function(x) {sort((powers %*% ((x + bitflips) %% 2)) +1)}))
results<-mat
results[,-ncol(mat)]<-results[neighbors,ncol(mat)]

m0也许你可以制作一个更小的“垫子”,让人们在上面试用他们的代码,而不是现在的32768*16 beast。干杯。好的,我换了一个小一点的。我只是想用较大的数字来说明需要多长时间。你能假设
mat
包含所有长度
r
的位字符串吗?如果是这样,您可以显式地找到最近的邻居,而无需每次遍历整个数组。是的,mat始终包含所有可能的组合。因此,你建议的解决方案将是伟大的!
m0<-mat[,-ncol(mat)]
bitflips<-diag(ncol(m0))
powers<-2^(ncol(m0):1-1)
neighbors<-t(apply(m0,1,function(x) {sort((powers %*% ((x + bitflips) %% 2)) +1)}))
results<-mat
results[,-ncol(mat)]<-results[neighbors,ncol(mat)]