2013-02-27 2 views
-8

У меня есть 3D-массив - обрR трехмерные массивы

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

Что вы спрашиваете? Как сделать то же вычисление быстрее или что? –

+3

@Hemmo: он явно получал бы ошибки с кодом в его нынешнем виде. Сделайте пример меньшим, а затем используйте его для тестирования. Любая ссылка на 'arr'-object должна содержать две запятые внутри« [». –

+1

(-1), посмотрев сообщение и комментарии OP, я действительно не могу понять, в чем вопрос. – QkuCeHBH

ответ

7

Так как ваш вопрос поставлен немного коряво, но пример того, что вы, возможно, пытаетесь сделать это, чтобы принять среднее значение для каждого массива 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

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

В следующих Q & A вы найдете немного больше кода для сопоставимой ситуации и ответа. Возможно, было бы полезно посмотреть на этот код вместе с этим ответом: http://stackoverflow.com/questions/13475039/how-to-optimize-the-following-code-with-nested-while-loop-multicore-an- option – Jochem

+0

Приношу свои извинения за неясность. В основном, не имея большого опыта работы с R 3D-массивами, мой вопрос заключается в том, как выполнить такое действие, как вычисление среднего значения по всем значениям d3, для каждого измерения d2 каждого измерения d1 массива с такими размерами: dim (arr) [ 1] d3 d2 d1 – user1701545

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]; 
} 

веселит