R中矩阵的一行及其在同一矩阵中的逆矩阵
有没有办法找出矩阵中的一行是否包含在矩阵中,但以相反的方式 例如,这在以下矩阵中发生:R中矩阵的一行及其在同一矩阵中的逆矩阵,r,matrix,reverse,na,R,Matrix,Reverse,Na,有没有办法找出矩阵中的一行是否包含在矩阵中,但以相反的方式 例如,这在以下矩阵中发生: [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] 1 1 1 2 2 2 3 3 3 [2,] 1 2 3 1 2 3 1 2 3 [3,] 3 3 3 2 2 2 1 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 1 1 2 2 2 3 3 3
[2,] 1 2 3 1 2 3 1 2 3
[3,] 3 3 3 2 2 2 1 1 1
在第一排和第三排之间
我已经开发了以下代码,但它仅在矩阵中以相反的方式存在一行时才起作用:
WW=W[, rev(seq_len(ncol(W)))]
x=match(data.frame(t(W)), data.frame(t(WW)))
A=cbind( c(1:nrow(W)),x )
Z=t(apply(A,1,sort))
x=unique(Z[,2])
W=W[-x,]
因此,在前面的矩阵W
中,我的代码不起作用,因为代码第二行的结果中有NA
我们如何解决这个问题?“有没有办法确定矩阵中的一行是否包含在矩阵中,但包含的方式是相反的?”
是,计算行之间的距离。如果矩阵没有那么大,这是非常有效的:
m <- matrix(c(1, 1, 3, 1, 2, 3, 1, 3, 3, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 1, 1, 3, 2, 1, 3, 3, 1), nrow = 3)
res <- as.matrix(dist(rbind(m,
m[, rev(seq_len(ncol(m)))])))
res <- res[nrow(m) + seq_len(nrow(m)), seq_len(nrow(m))]
rownames(res) <- seq_len(nrow(m))
which(!res, arr.ind = TRUE)
# row col
#3 3 1
#1 1 3
any(!res)
[1] TRUE
m不清楚最后几行应该做什么。您似乎能够找到哪些行是反向的,哪些行不是反向的,因此您的错误似乎与您的书面问题不同(即,是否有任何方法可以找到一行是否为反向重复)。@Axeman,我想列出矩阵中与其他行相反的行。这是我在代码中从第三行到最后一行所做的。好的,W[!is.na(x),]
将给出在同一矩阵中有反向的行。@Axeman这是正确的,但我希望每对行保留一行。对于pair,我指的是一行和它的倒数。它是有效的,但问题是,正如你所说,我有巨大的矩阵。什么是“巨大的”?你的方法,即使你能修复它,也不能很好地扩展。如果这太慢的话,我会用Rcpp写一个函数。我有300.000行甚至更多行的矩阵。正如我所说,Rcpp的任务(即使那样也不会很快)。您计算过要在那里检查多少行组合了吗?数字是惊人的。是的,是时候擦亮你的C++技能(或者任何编译语言),并访问一个有很多CPU的集群。