Я пытаюсь вычислить свертку двух дискретных вероятностных распределений в R. У меня есть два вектора, каждый из которых содержит вероятности. Мне нужно вычислить третий вектор, который имеет объединенные вероятности двух предыдущих векторов. I-я позиция в третьем векторе содержит сумму вероятностей (a [j] * b [k]) для всех j + k = i. У меня есть следующие функции для этого:Более эффективная работа матрицы в R
convolute <- function(a, b){
out <- rep(0, (length(a)+741))
for(i in 1:length(a)){
for (j in 1:length(b)){
out[i + j] <- out[i+j] + (a[i]*b[j])
}
}
return(out)
}
Моя проблема заключается в том, что эта функция должна быть вызвана несколько раз (> 1000000) и (относительно) медленно. Есть ли более эффективный способ в R для достижения этой операции, без использования двух циклов? Длина будет либо 741 или 1482, б всегда 741.
Спасибо
Не могли бы вы показать нам некоторые входные данные ('a' и' b') и что вы ожидаете от 'out' также выглядеть? –
Вы пробовали функцию 'convolve' R? – Pop
Спасибо. Функция convolve работает. (входные данные - это вероятности в диапазоне 0-1, так что сумма (a) = 1), выход также имеет это свойство) –