我有一个包含 180 列和 200,000 行的巨大数据库。为了更好地说明,我有一个 180 x 200000 的矩阵。每个矩阵都是一个位数。我需要找到它们的共现次数。 例如,我有 5 列的数据,其值为 1、2、3、4、5。我需要找到次数 (1,2),(1,3),(1,4),(1,5),(2,3),(2,4),(2,5), (3,4),(3,5),(4,5) 已在数据库中出现。你能建议我解决这个问题的方法吗? 我接触过 R 和 python。所以任何使用这些的建议都会很有帮助。 这也可以使用 AWS Map Reducer 来完成吗?有关这些行的任何帮助或指示也会有所帮助。
最佳答案
对的计数只是单例计数的乘积。
在我使用 R 的旧 MacBook Pro 上需要 5 秒:
生成一个200000行180列的矩阵,元素为数字:
mat <- matrix(sample(0:9,180*200000,repl=T),nc=180)
现在表格中每行的数字:
tab <- sapply( 0:9, function(x) rowSums( mat==x ))
现在找出每行中的对数:
cp <- combn( 0:9, 2, function(x) tab[,1+x[1] ] * tab[,1+x[2] ])
对行求和:
colSums(cp)
验证第一行的结果:
tab2 <- table( matrix(mat[1,], nr=180, nc=180), matrix(mat[1,], nr=180, nc=180, byrow=TRUE))
all( tab2[ lower.tri(tab2)] == cp[1,] )
关于python - 使用R/python/Mapreduce可以计算单词共现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202179/