全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
9725 6
2015-10-21
本人没有什么编程基础,我目前有一个很大的三维数组,需要转换为一个矩阵,是否能在R中用循环语句或者其他方式实现?希望高手相助,非常感谢!

三维数组(3, 2, 3)类似下面形式:
, , 1

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

, , 2

     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

, , 3

     [,1] [,2]
[1,]   13   16
[2,]   14   17
[3,]   15   18


希望转换后的矩阵(6, 3)如下:
1        7        13
4        10        16
2        8        14
5        11        17
3        9        15
6        12        18


再次感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-10-21 08:56:53
假设数组变量为a:

复制代码

如果你理解了上面这个方法的要点:矩阵本质上是向量,就可以把程序精简为:
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-21 18:07:06
cheetahfly 发表于 2015-10-21 08:56
假设数组变量为a:
非常感谢你的详细解答!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-21 21:18:41
基于楼主数据的特点,可直接用行组合就可以,避免使用循环计算,在进行大数据处理时可显著提高处理效率。

1、假定有数据:
> a <- array(1:18, dim=c(3,2,3))
> a
, , 1

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

, , 2

     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

, , 3

     [,1] [,2]
[1,]   13   16
[2,]   14   17
[3,]   15   18



2、合成后的矩阵为:
>b<- rbind(a[1,,],a[2,,],a[3,,])
一句话搞定。

3、查看结果
> b
     [,1] [,2] [,3]
[1,]    1    7   13
[2,]    4   10   16
[3,]    2    8   14
[4,]    5   11   17
[5,]    3    9   15
[6,]    6   12   18


4、使用更多数据测试:
> a <- array(1:24, dim=c(3,2,4))
> a
, , 1

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

, , 2

     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

, , 3

     [,1] [,2]
[1,]   13   16
[2,]   14   17
[3,]   15   18

, , 4

     [,1] [,2]
[1,]   19   22
[2,]   20   23
[3,]   21   24

> b<-rbind(a[1,,],a[2,,],a[3,,])
> b
     [,1] [,2] [,3] [,4]
[1,]    1    7   13   19
[2,]    4   10   16   22
[3,]    2    8   14   20
[4,]    5   11   17   23
[5,]    3    9   15   21
[6,]    6   12   18   24

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-21 22:18:19
hongweigg 发表于 2015-10-21 21:18
基于楼主数据的特点,可直接用行组合就可以,避免使用循环计算,在进行大数据处理时可显著提高处理效率。
...
多谢,这个角度我还没想到。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-22 00:48:35
hongweigg 发表于 2015-10-21 21:18
基于楼主数据的特点,可直接用行组合就可以,避免使用循环计算,在进行大数据处理时可显著提高处理效率。
...
非常感谢两位热心帮忙!我从其他论坛也咨询到了另外两种解决方案,列到下面:

(一)
>> x <- array(1:18, dim=c(3, 2, 3))
>> x
> , , 1
>
>      [,1] [,2]
> [1,]    1    4
> [2,]    2    5
> [3,]    3    6
>
> , , 2
>
>      [,1] [,2]
> [1,]    7   10
> [2,]    8   11
> [3,]    9   12
>
> , , 3
>
>      [,1] [,2]
> [1,]   13   16
> [2,]   14   17
> [3,]   15   18
>
>> apply(x, 3, t)
>      [,1] [,2] [,3]
> [1,]    1    7    13
> [2,]    4   10   16
> [3,]    2    8    14
> [4,]    5   11   17
> [5,]    3    9    15
> [6,]    6   12   18

(二) use aperm() (array index permuation):
  
> array(aperm(x, c(2,1,3)), c(6,3))

       [,1] [,2] [,3]
  [1,]    1    7    13
  [2,]    4   10   16
  [3,]    2    8    14
  [4,]    5   11   17
  [5,]    3    9    15
  [6,]    6   12   18
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群