R语言中怎么将矩阵变为三元组(即三列: row, col, value)

xiaoxiao2025-10-20  10

bing上搜索:

矩阵怎么变为三元组形式, 在bing上搜索结果:

各种C语言, 完全找不到R语言的实现方法.

R语言写循环很慢, 就用现成的包吧

Matrix

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

这应该是一个比较高效的方法.

完整代码:

# 矩阵变为三元组形式: R语言 Matrix mm = matrix(sample(c(0,0,2),size = 100,replace = T),10,10) mm # 假设是对称矩阵, 只保留下三角, 所以讲上三角为0 mm[upper.tri(mm)] = 0 mm library(Matrix) smm = Matrix(mm) smm # 变为三元组 re = summary(smm) sm = as.data.frame(re) sm library(dplyr) arrange(sm,i,j)
转载请注明原文地址: https://www.6miu.com/read-5038252.html

最新回复(0)