首页 > 解决方案 > 返回到矩阵中的位置

问题描述

comN<-gtools::permutations(2,5,v=c(0,1),repeats=TRUE)

which(comN==c(0,0,0,0,1),arr.ind.col=T)

但它没有给我第 2 行

我想知道 c(0,0,0,0,1) 在位置 comN [2,]

标签: r

解决方案


R的矩阵运算是按列顺序进行的,所以你指令中的比较是逐列which比较向量,回收它。c(0,0,0,0,1)看看这个简单的例子会发生什么。

m <- matrix(1:8, ncol = 2)
m
#     [,1] [,2]
#[1,]    1    5
#[2,]    2    6
#[3,]    3    7
#[4,]    4    8

m == c(1, 5)
#      [,1]  [,2]
#[1,]  TRUE FALSE
#[2,] FALSE FALSE
#[3,] FALSE FALSE
#[4,] FALSE FALSE

向量c(1, 5)不与第一行比较,比较是

c(1, 2) == c(1, 5)

thenc(1, 5)被回收并与第一列中的下一个值进行比较。因此,当它到达第二列时,该列中的第一个比较是

c(5, 6) == c(1, 5)
#[1] FALSE FALSE

归来c(FALSE, FALSE)

这就是为什么我需要在t()下面的解决方案中进行转置。一种方法可能是

which(colSums(t(comN) == c(0,0,0,0,1)) == ncol(comN))
#[1] 2

或者

which(apply(t(comN) == c(0,0,0,0,1), 2, all))

colSums解决方案的速度提高了大约 3 倍。


推荐阅读