【发布时间】:2013-12-30 22:15:50
【问题描述】:
我正在尝试将矩阵的第一行与同一矩阵的所有行进行比较。但是矢量化比较没有返回正确的结果。为什么会发生这种情况?
m <- matrix(c(1,2,3,1,2,4), nrow=2, ncol=3, byrow=TRUE)
> m
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 4
> # Why does the first row not have 3 TRUE values?
> m[1,] == m
[,1] [,2] [,3]
[1,] TRUE FALSE FALSE
[2,] FALSE FALSE FALSE
> m[1,] == m[1,]
[1] TRUE TRUE TRUE
> m[1,] == m[2,]
[1] TRUE TRUE FALSE
跟进。在我的实际数据中,我有大量的行(至少 1000 万行),然后时间和内存都加起来了。其他人在下面提出的其他建议?
m <- matrix(rep(c(1,2,3), 1000000), ncol=3, byrow=TRUE)
> #by @alexis_laz
> m1 <- matrix(m[1,], nrow = nrow(m), ncol = ncol(m), byrow = T)
> system.time(m == m1)
user system elapsed
0.21 0.03 0.31
> object.size(m1)
24000112 bytes
> #by @PaulHiemstra
> system.time( t(apply(m, 1, function(x) x == m[1,])) )
user system elapsed
35.18 0.08 36.04
跟进 2。 @alexis_laz 你是对的。我想比较每一行,并发布了一个后续问题 (How to vectorize comparing each row of matrix with all other rows)
【问题讨论】:
-
您也可以将
m[1,]转换为矩阵并进行比较:m == matrix(m[1,], nrow = nrow(m), ncol = ncol(m), byrow = T) -
后续跟进,您的最终目标是什么?例如。您想针对矩阵的其余部分测试每一行是否相等?您想针对每个矩阵的其余部分测试许多矩阵的第一行吗?或者您只是想尽快测试单个矩阵的第一行与其余部分的对比?
标签: r matrix comparison vectorization