2014-02-20 4 views
-1

Я имею эту формулу я производную, и я хочу реализовать в R.R: матрица двойное суммирование и нормирование векторов

enter image description here

Это двойной путь петли делает это:

munew = 0 
mu_normalizer = 0 

for (j in 1:dim(x)[2]) { 
    for (i in 1:dim(x)[1]) { 
    munew = munew + (x[i,j]/(sigma_2[j] *omega_2[i])) 
    }} 
for (j in 1:dim(x)[2]) { 
    for (i in 1:dim(x)[1]) { 
    mu_normalizer = mu_normalizer + (1/(sigma_2[j] *omega_2[i])) 
    }} 

munew = munew/mu_normalizer 

где sigma_2 и omega_2 являются сигма^2 и омега^2 соответственно.

Каков самый быстрый способ реализовать это в R?

+0

после выборки данных. Какова текущая скорость и почему этого недостаточно? – rawr

ответ

3

Возможно outer (или его %o%) является полезным:

x = matrix(sample(1:3, 20, T), 5) 
sigma_2 = runif(4) 
omega_2 = runif(5) 
munew = 0 
mu_normalizer = 0 

for (j in 1:dim(x)[2]) { 
    for (i in 1:dim(x)[1]) { 
    munew = munew + (x[i,j]/(sigma_2[j] *omega_2[i])) 
    }} 
munew 
#[1] 445.5648 
sum(x/(omega_2 %o% sigma_2)) 
#[1] 445.5648 

for (j in 1:dim(x)[2]) { 
    for (i in 1:dim(x)[1]) { 
    mu_normalizer = mu_normalizer + (1/(sigma_2[j] *omega_2[i])) 
    }} 
mu_normalizer 
#[1] 201.6099 
sum(1/(omega_2 %o% sigma_2)) 
#[1] 201.6099 

munew/mu_normalizer 
#[1] 2.210034 
sum(x/(omega_2 %o% sigma_2))/sum(1/(omega_2 %o% sigma_2)) #this is the actual answer 
#[1] 2.210034 
Смежные вопросы