矩阵怎么变为三元组形式, 在bing上搜索结果:
各种C语言, 完全找不到R语言的实现方法.
R语言写循环很慢, 就用现成的包吧
Matrix是一个很强大的包, 它可以将矩阵转化为稀疏矩阵, 将0变为., 节约资源.
测试, 生成10*10的矩阵, 里面有大量的0, 现在将其非0的地方转化为三元组的形式.
何谓三元组, 即使矩阵的转化为三列的形式, 本来矩阵是二维的, 现在将其行号抽取出来, 作为第一列, 将其列号抽取出来, 作为第二列, 对应的值抽取出来, 作为第三列.
比如:
1 2 3 4变为三元组是:
1 1 1 1 2 2 2 1 3 2 2 4测试数据
# 矩阵变为三元组形式: R语言 Matrix mm = matrix(sample(c(0,0,2),size = 100,replace = T),10,10) # 假设是对称矩阵, 只保留下三角, 所以讲上三角为0 mm[upper.tri(mm)] = 0 mm > mm [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] 2 0 0 0 0 0 0 0 0 0 [2,] 0 2 0 0 0 0 0 0 0 0 [3,] 0 2 2 0 0 0 0 0 0 0 [4,] 0 0 0 0 0 0 0 0 0 0 [5,] 0 0 0 0 2 0 0 0 0 0 [6,] 0 0 0 2 2 0 0 0 0 0 [7,] 0 0 0 0 0 0 0 0 0 0 [8,] 2 0 0 0 2 0 0 0 0 0 [9,] 0 0 0 2 0 2 0 0 0 0 [10,] 0 0 0 0 0 0 0 2 2 0转化为稀疏矩阵:
可以看到, 稀疏矩阵所有的0都变成了点号.
library(Matrix) smm = Matrix(mm) smm > smm 10 x 10 sparse Matrix of class "dtCMatrix" [1,] 2 . . . . . . . . . [2,] . 2 . . . . . . . . [3,] . 2 2 . . . . . . . [4,] . . . . . . . . . . [5,] . . . . 2 . . . . . [6,] . . . 2 2 . . . . . [7,] . . . . . . . . . . [8,] 2 . . . 2 . . . . . [9,] . . . 2 . 2 . . . . [10,] . . . . . . . 2 2 .将稀疏矩阵转化为三元组
# 变为三元组 re = summary(smm) sm = as.data.frame(re) sm结果:
> sm i j x 1 1 1 2 2 8 1 2 3 2 2 2 4 3 2 2 5 3 3 2 6 6 4 2 7 9 4 2 8 5 5 2 9 6 5 2 10 8 5 2 11 9 6 2 12 10 8 2 13 10 9 2这应该是一个比较高效的方法.
