使用R.matlab从MATLAB导入的数组中拉出单个矩阵

时间:2017-01-31 15:05:26

标签: arrays r matlab list matrix

所以我在Matlab中有一个包含10个36 x 36矩阵的数组。我将名为A的数组保存为.mat。然后我使用R包R.matlab导入文件。我试图使用R package pcalg中的函数shd找到数组A中十个矩阵中每个矩阵的结构汉明距离。对于普通矩阵,执行此操作的过程如下

str(testfile)

List of 1
 $ K210000ALARM:List of 10
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 1 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ :List of 1
  .. ..$ : num [1:37, 1:37] 0 0 0 0 0 0 0 0 0 0 ...
 - attr(*, "header")=List of 3
  ..$ description: chr "MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Tue Jan 31 06:58:46 2017                                        "
  ..$ version    : chr "5"
  ..$ endian     : chr "little"

这给出了结构汉明距离,这只是将正确矩阵与测试矩阵进行比较的数字。

如何在从Matlab导入R时将数组转换为列表列表?我想要十个矩阵中每个矩阵的结构汉明距离。有没有办法自动将它们拉出来并将它们转换为图形类型然后进行比较?

导入数据的结构如下所示:

"cache-control" header

1 个答案:

答案 0 :(得分:0)

此代码重新创建数据结构。

testfile <- list(lapply(1:10, function(i) list(matrix(i:(8+i), 3))))

你应该能够用

拉出第一个矩阵
testfile[[1]][[1]][[1]]
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

和第二个

testfile[[1]][[2]][[1]]
     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
[3,]    4    7   10

矩阵列表

要将结构展平为矩阵列表(可能是它们的最佳结构),您可以使用

myMatList <- lapply(unlist(testfile, recursive=FALSE), function(i) unlist(i))

在这里,unlist(testfile, recursive=FALSE)剥离了长度为1的外部列表,unlist(i)剥离了长度为1的内部列表。

<强>阵列

要获得数组,您可以使用

# get array of correct dimensions with 0s
myArray <- array(0, c(dim(testfile[[1]][[2]][[1]]), 10))
# fill it in
for(i in 1:10) myArray[,,i] <- testfile[[1]][[i]][[1]]

返回

myArray[,,1:2]
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]    2    5    8
[2,]    3    6    9
[3,]    4    7   10

获取距离

对于矩阵列表,以下内容可能会有效。

myHamsList <- lapply(myMatList, function(i) shd(Correct,
                                       as.graphnel(graph.adjacency(testfile, weighted = T))))