gpt4 book ai didi

r - 将每个矩阵行与向量进行比较

转载 作者:行者123 更新时间:2023-12-03 23:18:02 24 4
gpt4 key购买 nike

我有一个 3 列矩阵,我想将其行与向量进行比较。我知道最简单的方法是通过 apply(table==vector,1,sum)>(length(vector)-1) ,但由于我一直在标记错误的行,因此我开始深入研究部分结果。下面是我的代码和 R 似乎正在做的一个错误。

transition_matrix<-cbind(permutations(n=7,r=4,v=c(0,1,2,3,4,5,6),repeats.allowed=T),prob=0,n=1)
vector<-c(1,0,1)
table <- transition_matrix[,c(1:3)]
table[59,]
>0 1 1
(table==vector)[59,]
>TRUE TRUE TRUE
所以我只是困惑地盯着我的代码,老实说不明白为什么它不起作用。我可能会遗漏一些东西,因为如果我直接将第 59 行与向量进行比较,我会得到正确的结果。

最佳答案

正如 Chi Pak 所指出的,table == vector正在向下操作列,但您想将每一行与向量进行比较。

获得所需行为的一种方法是在与向量比较之前转置矩阵,然后再转置。

样本数据:

(table <- matrix(rep(0:2, 4), 4))
# [,1] [,2] [,3]
# [1,] 0 1 2
# [2,] 1 2 0
# [3,] 2 0 1
# [4,] 0 1 2

(vector <- c(0, 0, 1))
# [1] 0 0 1

计算:
t(t(table) == vector)
# [,1] [,2] [,3]
# [1,] TRUE FALSE FALSE
# [2,] FALSE FALSE FALSE
# [3,] FALSE TRUE TRUE
# [4,] TRUE FALSE FALSE

与使用 apply 的方法相比,这是一个优势。是所有的操作都是向量化的,这意味着这在大型矩阵上会更有效率。为了看到这一点,让我们看看一个有一百万行的矩阵:
set.seed(144)
table <- matrix(sample(0:1, 3e6, replace=TRUE), 1e6)
system.time(t(t(table) == vector))
# user system elapsed
# 0.066 0.013 0.078
system.time(t(apply(table,1,function(x) x==vector)))
# user system elapsed
# 2.508 0.057 2.576

关于r - 将每个矩阵行与向量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45527620/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com