2017-01-31 6 views
0

したがって、Matlabには36個の36個の行列が配列されています。そのArrayをAという名前で.matとして保存しました。その後、RパッケージR.matlabを使用してファイルをインポートしました。私は、Rパッケージpcalgの関数shdを使って、配列Aの10個の行列それぞれの構造ハミング距離を求めようとしています。R.matlabを使用してMATLABからインポートされた配列から単一の行列を引き出す

library(pcalg) 
library(R.matlab) 
testfile = readMat("SingleMatrix.mat") 
testfile = as.matrix(testfile$SingleMatrix) 
library(igraph) 
Test=as.graphnel(graph.adjacency(testfile, weighted = T)) 
shd(Correct,Test) 

を次のように通常のマトリックスのためにこれを行うプロセスである、これは試験マトリックスへの正しいマトリックスを比較するだけで数である構造ハミング距離を与えます。

MatlabからRにインポートされたときに配列が変換されるリストについて、これを行うにはどうすればよいですか?私は、10個の行列それぞれの構造ハミング距離が必要です。それらを引き出し、それらをグラフタイプに変換して比較を行うことを自動化する方法はありますか?

インポートされたデータの構造は、次のようになります。

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" 

答えて

0

このコードは、データの構造を再現しています。

あなたが

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 

リストを有する第二と第1行列を引き出すことができるはずです

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

行列のリスト(これは最善の構造かもしれない)彼らのために、あなたが取得するには長さ1

配列

の内側のリストから外れここ

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

、長さ1の外側のリストオフunlist(testfile, recursive=FALSE)ストリップ、およびunlist(i)ストリップを使用することができます配列を使用すると

# 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)))) 
関連する問題