Search on bing:
How to change the matrix to triple form and search the result on bing:
All kinds of C language can't find the way to realize R language
R language writing cycle is very slow, just use the ready-made package
Matrix
Matrix is a very powerful package. It can convert matrix to sparse matrix, change 0 to... And save resources
Test, generate a matrix of 10 * 10, which contains a large number of zeros. Now convert the non-zero parts into the form of triples
What is a triple? Even if the matrix is transformed into the form of three columns, the original matrix is two-dimensional, now extract its row number as the first column, extract its column number as the second column, extract the corresponding value as the third column
For example:
1 2 3 4
To triple is:
1 1 1 1 2 2 2 1 3 2 2 4
test data
# Matrix into triple form: R language matrix mm = matrix(sample(c(0,0,2),size = 100,replace = T),10,10) # Let's say it's a symmetric matrix, only the lower triangle is preserved, so the upper triangle is 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
Convert to sparse matrix:
As you can see, all zeros of a sparse matrix become dots
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 .
Convert sparse matrix to triple
# Change to triples re = summary(smm) sm = as.data.frame(re) sm
Result:
> 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
This should be a more efficient method
Full code:
# Matrix into triple form: R language matrix mm = matrix(sample(c(0,0,2),size = 100,replace = T),10,10) mm # Let's say it's a symmetric matrix, only the lower triangle is preserved, so the upper triangle is 0 mm[upper.tri(mm)] = 0 mm library(Matrix) smm = Matrix(mm) smm # Change to triples re = summary(smm) sm = as.data.frame(re) sm library(dplyr) arrange(sm,i,j)