Добавить 2D матрицу в 3D матрицу - PullRequest
3 голосов
/ 25 марта 2012

У меня есть 2D-матрица, которую мне нужно добавить в 3D-матрицу, например:

mx3d <- array(1:60, c(3,4,5))
mx2d <- array(letters[1:15], c(3,5))

Можно ли добавить mx2d в mx3d, чтобы mx3d.new стал3x5x5 матрица?Будет ли проще, если я преобразую матрицу в виде списка?Спасибо!

Чтобы было понятно, исходя из того, что мы имеем в mx2d и mx3d, я хочу получить что-то вроде:

> mx3d.new
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    4    7   10  "a"
[2,]    2    5    8   11  "b"
[3,]    3    6    9   12  "c"

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]   13   16   19   22  "d"
[2,]   14   17   20   23  "e"
[3,]   15   18   21   24  "f"

, , 3

     [,1] [,2] [,3] [,4] [,5]
[1,]   25   28   31   34  "g"
[2,]   26   29   32   35  "h"
[3,]   27   30   33   36  "i"

, , 4

     [,1] [,2] [,3] [,4] [,5]
[1,]   37   40   43   46  "j"
[2,]   38   41   44   47  "k"
[3,]   39   42   45   48  "l"

, , 5

     [,1] [,2] [,3] [,4] [,5]
[1,]   49   52   55   58  "m"
[2,]   50   53   56   59  "n"
[3,]   51   54   57   60  "o"

Ответы [ 2 ]

6 голосов
/ 25 марта 2012
library(abind)
mx3d.new <- abind(mx3d, mx2d, along= 2)
for(i in 1:5) print(mx3d.new[,,i])

Это работает?

Это дает мне это:

> for(i in 1:5) print(mx3d.new[,,i])

     [,1] [,2] [,3] [,4] [,5]

[1,] "1"  "4"  "7"  "10" "a" 

[2,] "2"  "5"  "8"  "11" "b" 

[3,] "3"  "6"  "9"  "12" "c" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "13" "16" "19" "22" "d" 

[2,] "14" "17" "20" "23" "e" 

[3,] "15" "18" "21" "24" "f" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "25" "28" "31" "34" "g" 

[2,] "26" "29" "32" "35" "h" 

[3,] "27" "30" "33" "36" "i" 

     [,1] [,2] [,3] [,4] [,5]

[1,] "37" "40" "43" "46" "j" 

[2,] "38" "41" "44" "47" "k" 

[3,] "39" "42" "45" "48" "l" 

     [,1] [,2] [,3] [,4] [,5]
[1,] "49" "52" "55" "58" "m" 

[2,] "50" "53" "56" "59" "n" 

[3,] "51" "54" "57" "60" "o"
2 голосов
/ 25 марта 2012

Я не уверен, что правильно понял ваш вопрос, но

mx3d.new <- array(letters[1:75],c(3,5,5))

дать вам то, что вы хотите? Или, если вы хотите повторить,

mx3d.new <- array(letters[1:15],c(3,5,5))

Возможно, если вы дадите какой-то контекст проблемы, которую хотите решить, я смогу оказать дополнительную помощь.

Ура, Jim

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...