如何将矩阵转换为数组?
我有一个大型的数据集,我想将其转换为数组。但举个例子,我们举个简单的例子。 我有以下矩阵如何将矩阵转换为数组?
`\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrrrr}
\hline
& 1 & 2 & 3 & 4 & 5 & 6 \\
\hline
1 & 1 & 11 & 21 & 31 & 41 & 51 \\
2 & 2 & 12 & 22 & 32 & 42 & 52 \\
3 & 3 & 13 & 23 & 33 & 43 & 53 \\
4 & 4 & 14 & 24 & 34 & 44 & 54 \\
5 & 5 & 15 & 25 & 35 & 45 & 55 \\
6 & 6 & 16 & 26 & 36 & 46 & 56 \\
7 & 7 & 17 & 27 & 37 & 47 & 57 \\
8 & 8 & 18 & 28 & 38 & 48 & 58 \\
9 & 9 & 19 & 29 & 39 & 49 & 59 \\
10 & 10 & 20 & 30 & 40 & 50 & 60 \\
\hline
\end{tabular}
\end{center}
\end{table}
`
我需要的是这个矩阵转换成尺寸(5,6,2)的阵列,其中第一矩阵包含“x”和第二矩阵的前五行将包含最后5排。 我试图
dim(x)<-c(5,6,2)
这使得基质1具有连续1:30数字,然后基质-2具有连续31:60号码。这不是我的要求。
在此先感谢。
你提供什么是拉TeX表示。在R中相同的基体是
M <- matrix(1:60, ncol=6) # a 10 x 6 matrix
考虑使用abind
从包“abind”:
require(abind)
abind(M[1:5,], M[6:10, ], along=3)
#-----------------
, , 1
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 11 21 31 41 51
[2,] 2 12 22 32 42 52
[3,] 3 13 23 33 43 53
[4,] 4 14 24 34 44 54
[5,] 5 15 25 35 45 55
, , 2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 6 16 26 36 46 56
[2,] 7 17 27 37 47 57
[3,] 8 18 28 38 48 58
[4,] 9 19 29 39 49 59
[5,] 10 20 30 40 50 60
如果你不想使用外部包,将解决每个的转置版本切片,然后转置,然后重新维度。你不能调换一个数组,然而,有一个aperm
功能,你可以看看:
Mt <- t(M)
dim(Mt) <- c(6, 5, 2)
Mt
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 11 12 13 14 15
[3,] 21 22 23 24 25
[4,] 31 32 33 34 35
[5,] 41 42 43 44 45
[6,] 51 52 53 54 55
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 6 7 8 9 10
[2,] 16 17 18 19 20
[3,] 26 27 28 29 30
[4,] 36 37 38 39 40
[5,] 46 47 48 49 50
[6,] 56 57 58 59 60
的aperm解决方案:
> aperm(Mt, c(2,1,3))
, , 1
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 11 21 31 41 51
[2,] 2 12 22 32 42 52
[3,] 3 13 23 33 43 53
[4,] 4 14 24 34 44 54
[5,] 5 15 25 35 45 55
, , 2
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 6 16 26 36 46 56
[2,] 7 17 27 37 47 57
[3,] 8 18 28 38 48 58
[4,] 9 19 29 39 49 59
[5,] 10 20 30 40 50 60
高维阵列上的'S诗歌'中有一章可能有所帮助,包括一些更多关于'精子'的解释。 http://www.burns-stat.com/pages/spoetry.html – 2012-03-06 09:17:09
我无法判断您的示例数据是否真的是XML-ish格式,或者它看起来像这样:-)。只要你现在有一个二维矩阵充满了R中的数据,Chase的答案可能会做。如果你想成为非常小心,尽量
data.cube <- array(NA, dim = c(5,6,2))
data.cube[,,1] <- your.matrix[1:5,]
data.cube[,,2] <- your.matrix[6:10,]
这是迂腐,但我希望它会指出一些方便的方式将数据提供给到一个数组中R.
感谢您的回应。用于处理大型矩阵 – Iftikhar 2012-03-05 20:03:52
如何:
M <- matrix(1:60,nrow=10)
M2 <- lapply(split(M,0:9%/%5),matrix,nrow=5)
M2
$`0`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 11 21 31 41 51
[2,] 2 12 22 32 42 52
[3,] 3 13 23 33 43 53
[4,] 4 14 24 34 44 54
[5,] 5 15 25 35 45 55
$`1`
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 6 16 26 36 46 56
[2,] 7 17 27 37 47 57
[3,] 8 18 28 38 48 58
[4,] 9 19 29 39 49 59
[5,] 10 20 30 40 50 60
如果你真的需要一个array
:
array(unlist(M2),c(5,6,2))
你可以用'阵列(yourMatrixHere,昏暗= C开始(5, 6,2)'......你可能需要弄清楚它是如何填充这些尺寸的。 – Chase 2012-03-05 19:29:56
可以请你进一步解释一下,我怎样才能要求R填充这些数组? – Iftikhar 2012-03-05 19:42:13