2016-03-18 2 views
0

В следующем коде для матрицы Ма стандартный нормальный случайный вектор x1 умножается и суммируются столбцы и максимальные значения. Повторяя этот процесс S = 1000 раз, мне интересно найти верхний 95% -ный квантиль f2. Из-за больших размерных матриц мне потребовалось много, и когда я попытался с некоторыми изменениями, у меня появилось сообщение об ошибке в распределении памяти. Есть ли способ ускорить эту симуляцию? Заранее спасибо.В R, избегайте петли или применяйте или подключайте

set.seed(1) 
S=1000; n=1000; D=10000 

Ma=matrix(rnorm(n*D),ncol=D) 
f2<-NULL 

for (i in 1:S){ 
x1=rnorm(n,0,1) 
f1=colSums(Ma*x1) 
f2[i]=max(f1) 
} 

q=quantile(f2,0.95) 
+2

Это, кажется, есть хороший шанс того, чтобы быть проблемой XY http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378. Вы на самом деле не описали задачу, но в короткие сроки разместили два отдельных, но только несколько разных вопроса и попросили «сделать их быстрее». –

+0

Я взглянул на материал. Это действительно полезно. Благодаря! – Sue

ответ

2

Этот вопрос является лишь незначительной вариацией вашего предыдущего вопроса. Следующее эквивалентно.

set.seed(1) 
S <- n <- 1000 
D <- 10000 

Ma <- matrix(rnorm(n*D),ncol=D) 
x1 <- matrix(rnorm(n*S,0,1),ncol=S) 
f1 <- crossprod(Ma,x1) 
f2 <- apply(f1,2,max) 
q <- quantile(f2,0.95) 
+0

Отлично. Огромное спасибо. – Sue