Я реализую пример, приведенный в книге «Элементы статистического обучения: интеллектуальный анализ данных, вывод и предсказание» (Хэшлт, Тибширани, Фридман).Оптимизация цикла
Моя цель состоит в том, чтобы генерировать 10 + 10 средств из двух двумерных нормальных распределений, а затем использовать первые десять средств для создания точек с надписью «Зеленый», а остальные десять - для создания «красных» точек. Среднее значение двумерного гауссова, из которого должна генерироваться точка, должно выбираться случайным образом каждый раз. Я не слишком хорошо знаком с R, поэтому я использовал for-loop, используя который занимает очень много времени, когда n становится больше. Вот мой код:
Sigma = diag(2)
greenMeans= mvrnorm(n=10, c(1,0), Sigma)
redMeans= mvrnorm(n=10, c(0,1), Sigma)
n=1000000
green<- array(dim=c(n,2))
red<- array(dim=c(n,2))
for (i in 1:n)
{
newGreen<- mvrnorm(n=1,greenMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
newRed<- mvrnorm(n=1,redMeans[sample(c(1:10),1,replace=TRUE),], Sigma/5)
green[i,1] <- newGreen[1]
green[i,2] <- newGreen[2]
red[i,1] <- newRed[1]
red[i,2] <- newRed[2]
}
эти две команды не эквивалентны, 'образца (redMeans, 1, replace = TRUE) ' не принимает во внимание тот факт, что у нас есть двумерный массив в наших руках; он выбирает случайное число из 20 скаляров в векторе. Он должен выбрать случайную точку из векторных redMeans. Кроме того, аргумент 'mu'' mvrnorm' не работает так. 'mu' - вектор, предоставляющий средства переменных, а не вектор, содержащий средства для каждой отдельной точки. – jsonaj
@ user2058602 Я удалил неправильную и спекулятивную часть моего ответа. –