2013-02-27 157 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]; 
} 

歡呼