R等效的Matlab间谍功能

时间:2015-04-15 15:53:19

标签: r matlab sparse-matrix

在Matlab中,有一个名为spy的函数,它显示稀疏矩阵的结构。它创建了矩阵的图表。具有非零值的每个条目着色的维度。 R中是否有等效函数?

2 个答案:

答案 0 :(得分:8)

来自Matrix

image()是一种选择。

library(Matrix)

# Example from ?Matrix:::sparseMatrix
i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
A <- sparseMatrix(i, j, x = x)

print(A)
##8 x 10 sparse Matrix of class "dgCMatrix"

##[1,] . 7 . . .  .  .  .  .  .
##[2,] . . . . .  .  .  .  .  .
##[3,] . . . . .  .  .  . 14  .
##[4,] . . . . . 21  .  .  .  .
##[5,] . . . . .  . 28  .  .  .
##[6,] . . . . .  .  . 35  .  .
##[7,] . . . . .  .  .  . 42  .
##[8,] . . . . .  .  .  .  . 49

image(A)

enter image description here


要在R中获得spy()的输出,需要更多的工作。

在MATLAB(2011b)中:

spy()
h = gcf;
axObj = get(h, 'Children');
datObj = get(axObj, 'Children');

xdata = get(datObj,'XData');
ydata = get(datObj,'YData');
spyMat = [xdata; ydata];
csvwrite('spydat.csv',spyMat);

在R:

library(Matrix)
spyData <- read.csv("spydat.csv")
spyMat <- t(sparseMatrix(spyData[1,],spyData[2,]))
image(spyMat)

enter image description here

答案 1 :(得分:0)

基于上述想法,在R中复制Matlab spy()函数的简单函数是:

  library(Matrix)
  spy <- function(w){
    # Get indices not equal to zero
    inds <- which(w != 0, arr.ind=TRUE )
    # Create sparse matrix with ones where not zero
    A <- sparseMatrix(inds[,1], inds[,2], x = rep(1,nrow(inds)))
    # 
    image(A))
  }

这可能对某些应用程序有用。