2013-02-27 110 views
-8

我有一个3D阵列 - ARRR三大维阵列

dim(arr) 
[1] 2000 22 3 

我们叫2000 dim1,22 dim2和3 dim3。 我想做这样的事情:

for(d1 in 1:dim1){ 
    for(d2 in 1:dim2){ 
     #compute the mean across the 2000 values of arr[d1,d2] 
     m<-mean(arr[d1,d2]) 
    } 
} 

任何想法?

+1

什么你问?如何更快地做出相同的计算? – 2013-02-27 21:04:42

+3

@Hemmo:他显然会在代码中看到错误。让示例变小,然后用它进行测试。任何对'arr'对象的引用在“[”调用中都需要有两个逗号。 – 2013-02-27 21:05:35

+1

(-1),在看了帖子和OP的评论之后,我真的不知道问题是什么。 – QkuCeHBH 2013-02-27 23:56:21

回答

7

所以你的问题提出的方式是有点草率,但的一个例子是什么你可能试图做的是取其中每3个的每个2000 x 22阵列的平均值。这里是如何做到这一点:

arr = array(1, dim=c(2000,22,3)) 
dim(arr) 

m = NULL 
dim3 = 3 
for(d3 in 1:dim3){ 
    m[d3] = mean(arr[,,d3]) 
} 
+0

谢谢。让我试着进一步澄清它。有没有办法将这个数组转换成3个[22 X 2000]矩阵的列表?然后,我可以遍历列表并计算每个矩阵行的均值。谢谢 – user1701545 2013-02-27 21:52:27

4

我猜你可能希望这样的结果:

m <- apply(arr, 1:2, mean) 

您当前的代码将在每一个内部循环覆盖米,你最终会得到一个值,它也将抛出一个尺寸不匹配错误当它遇到arr[d1,d2]。如果您想要使用for-loop策略,则需要将m定义为dim1 x dim2矩阵,然后使用m[d1,d2] <- mean(arr[d1, d2, ])填充其条目。

接下来的时间,如果你想避免所有这些downvotes的,为什么不显示一些测试用的小例子中的物体:

arr <- array(1:5*4*3, c(5,4,3)) 
+0

在下面的问答中,您可以找到更多关于类似情况和答案的代码。将这段代码与这个答案一起看看可能会有所帮助:http://stackoverflow.com/questions/13475039/how-to-optimize-the-following-code-with-nested-while-loop-multicore-an-选项 – Jochem 2013-02-27 21:27:51

+0

我很抱歉不清楚。基本上,对R 3D阵列没有太多经验,我的问题是如何执行类似于计算所有d3值的均值的操作,对于具有这些维度的数组的每个d1维度的每个d2维度:dim(arr) [ 1] d3 d2 d1 – user1701545 2013-02-27 21:35:20

1

没关系,我明白了。 这就是我会创造的3名单[4×6]矩阵:

arr = array(1, dim=c(6,4,3)); 
l<-list(length=dim(arr)[3]); 
for (i in 1:dim(arr)[3]){ 
    l[[i]]<-arr[,,i]; 
} 

欢呼